将项目添加到 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的主要内容,如果未能解决你的问题,请参考以下文章