向 QComboBox 添加项目

Adding items to QComboBox

我正在尝试将项目添加到两个组合框中。

下面的代码运行没有错误,我看到我正在尝试添加的列表并且“fin”被打印到终端,但组合框显示为空。

from PyQt5.QtWidgets import QMainWindow
from PyQt5 import QtWidgets

# import GUI from designer file
from main_menu import Ui_main_menu
# import other functions
from add_functions import ChangeLists


class Main(QMainWindow, Ui_main_menu):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)
        self.init_lists()

    def init_lists(self):
        # Team List
        team_list_file = open(r'C:\NHLdb_pyqt\files\NHLteams.txt', 'r')
        team_list = team_list_file.read().splitlines()
        team_list_file.close()
        print("team list: ", team_list)
        # Initial Player List
        player_list_init = "Please Select a Team"
        # Populate combo box lists
        self.team_select_combobox.addItems(team_list)
        self.player_select_combobox.addItem(player_list_init)
        # connect combo box to function that will change player list based on team list selection
        # self.team_select_combobox.currentTextChanged.connect(ChangeLists.team_changed)
        print("fin")


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    main_menu = QtWidgets.QDialog()
    ui = Main()
    ui.setupUi(main_menu)
    # main_menu = Main()
    main_menu.show()
    sys.exit(app.exec_())

您同时使用了两种加载 ui 的方法,多重继承方法和“直接方法”,并且您实际上显示了 QDialog 的 main_menu 实例(没有任何 init_lists 功能)。

结果是,即使 init_lists 被调用,它也会在错误的 window 中“显示”(实际上,不是),因为您显示的是 main_menu 实例.

显然,你不应该同时使用它们,因为第一个就足够了(通常是最多的 used/suggested),然后显示正确的实例对象:

if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    main_menu = Main()
    main_menu.show()
    sys.exit(app.exec_())

请注意,您的实现还有其他问题:您在 Main class 中继承自 QMainWindow,但稍后您尝试设置 ui 使用 QDialog。

只应使用在 Designer 中创建的 base class(使用什么方法加载 ui 并不重要)。我可以假设 ui 是使用 QDialog 创建的(否则会发生异常,因为 QMainWindow ui 会尝试使用 setCentralWidget() 这是一个不存在的函数QDialog).

因此,您可以在 Designer 中创建一个新的主 window 并在其中复制现有布局(如果您需要 QMainWindow 的功能,例如菜单栏、状态栏、停靠小部件或工具栏),或者在构造函数中正确使用 QDialog class:

class Main(<b>QDialog</b>, Ui_main_menu):
    # ...