将项目添加到 QComboBox

Posted

技术标签:

【中文标题】将项目添加到 QComboBox【英文标题】:Adding items to QComboBox 【发布时间】:2021-04-12 18:52:24 【问题描述】:

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

下面的代码运行没有错误,我看到我正在尝试添加的列表并且“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_())

【问题讨论】:

【参考方案1】:

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

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

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

if __name__ == "__main__":
    import sys

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

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

只应使用在 Designer 中创建的 基类(无论您使用什么方法来加载 ui)。我可以假设 ui 是使用 QDialog 创建的(否则会发生异常,因为 QMainWindow ui 会尝试使用 setCentralWidget() 这是 QDialog 不存在的函数)。

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

class Main(QDialog, Ui_main_menu):
    # ...

【讨论】:

以上是关于将项目添加到 QComboBox的主要内容,如果未能解决你的问题,请参考以下文章

将项目添加到 QComboBox

Xcode 将多个框架添加到多个目标和项目

将脚手架项目添加到类库

将项目添加到 PopupMenu

将 Firebase 添加到颤振项目,破坏项目

将项目添加到对象中