PyQt在打开对话框时修改组合框项目

问题描述

我在Windows Subsystem for Linux和XLaunch结合使用Python 3.7.7和PyQt 5.9.2进行图形显示。

我创建了一个带有2个按钮的主窗口,一个用于加载Excel文件,另一个用于处理它。我还创建了一个包含10个组合框的对话框。请看一下主窗口和对话框

加载文件可以正常工作。 Excel表将作为熊猫数据框加载。

当我单击“处理”按钮时,它应该打开一个对话框,并用数据框的列名填充组合框项。

但是,这不起作用。我收到以下错误消息:

回溯(最近一次通话最后一次):onProcessBtnClicked中的文件“ app.py”,第38行

dlg.comboBox.addItems([self.df.columns中的c为c]]

AttributeError:“ ProcessDlg”对象没有属性“ comboBox”

已中止(核心已弃用)

该问题发生在方法“ onProcessBtnClicked”中。我不知道如何访问和修改对话框的组合框。我已经在下面复制了我的主应用程序的代码。

from PyQt5 import uic,QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QDialog,QComboBox
from MainWindow import Ui_MainWindow
from dialog_column_names import Ui_Dialog
import pandas as pd
import sys


class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):

    def __init__(self,*args,obj=None,**kwargs):
        super(MainWindow,self).__init__(*args,**kwargs)
        self.setupUi(self)
        self.btn_process.clicked.connect(self.onProcessBtnClicked)
        self.df = None
  
    def setupUi( self,MW ):
        super().setupUi( MW )

    def browseSlot(self):
        options = QtWidgets.QFileDialog.Options()
        options |= QtWidgets.QFileDialog.DontUseNativeDialog
        fileName,_ = QtWidgets.QFileDialog.getOpenFileName(
            None,"QFileDialog.getOpenFileName()","","All Files (*);;Excel Files (*.xlsx)",options=options,)

        self.df = pd.read_excel(fileName)
        self.lineEdit.setText(fileName)
          
    def onProcessBtnClicked(self):
        dlg = ProcessDlg(self)
        dlg.comboBox.addItems([c for c in self.df.columns])
        dlg.comboBox_10.addItems([c for c in self.df.columns])
        dlg.comboBox_11.addItems([c for c in self.df.columns])
        dlg.comboBox_3.addItems([c for c in self.df.columns])
        dlg.comboBox_4.addItems([c for c in self.df.columns])
        dlg.comboBox_5.addItems([c for c in self.df.columns])
        dlg.comboBox_6.addItems([c for c in self.df.columns])
        dlg.comboBox_7.addItems([c for c in self.df.columns])
        dlg.comboBox_8.addItems([c for c in self.df.columns])
        dlg.comboBox_9.addItems([c for c in self.df.columns])
        dlg.exec()

        
class ProcessDlg(QDialog):
    def __init__(self,parent=None):
        super().__init__(parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

        
def main(args):
    app = QtWidgets.QApplication(args)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

    
if __name__ == '__main__':
    main(sys.argv)

这是dialog_column_names.py(由Qt创建者生成)的代码。

from PyQt5 import QtCore,QtGui,QtWidgets

class Ui_Dialog(object):
    def setupUi(self,Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(233,347)
        self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
        self.buttonBox.setGeometry(QtCore.QRect(40,310,166,24))
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.widget = QtWidgets.QWidget(Dialog)
        self.widget.setGeometry(QtCore.QRect(10,10,212,286))
        self.widget.setObjectName("widget")
        self.formLayout = QtWidgets.QFormLayout(self.widget)
        self.formLayout.setContentsMargins(0,0)
        self.formLayout.setObjectName("formLayout")
        self.lineEdit = QtWidgets.QLineEdit(self.widget)
        self.lineEdit.setObjectName("lineEdit")
        self.formLayout.setWidget(0,QtWidgets.QFormLayout.LabelRole,self.lineEdit)
        self.comboBox = QtWidgets.QComboBox(self.widget)
        self.comboBox.setObjectName("comboBox")
        self.formLayout.setWidget(0,QtWidgets.QFormLayout.FieldRole,self.comboBox)
        self.lineEdit_3 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.formLayout.setWidget(1,self.lineEdit_3)
        self.comboBox_3 = QtWidgets.QComboBox(self.widget)
        self.comboBox_3.setObjectName("comboBox_3")
        self.formLayout.setWidget(1,self.comboBox_3)
        self.lineEdit_4 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.formLayout.setWidget(2,self.lineEdit_4)
        self.comboBox_4 = QtWidgets.QComboBox(self.widget)
        self.comboBox_4.setObjectName("comboBox_4")
        self.formLayout.setWidget(2,self.comboBox_4)
        self.lineEdit_5 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.formLayout.setWidget(3,self.lineEdit_5)
        self.comboBox_5 = QtWidgets.QComboBox(self.widget)
        self.comboBox_5.setObjectName("comboBox_5")
        self.formLayout.setWidget(3,self.comboBox_5)
        self.lineEdit_6 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_6.setObjectName("lineEdit_6")
        self.formLayout.setWidget(4,self.lineEdit_6)
        self.comboBox_6 = QtWidgets.QComboBox(self.widget)
        self.comboBox_6.setObjectName("comboBox_6")
        self.formLayout.setWidget(4,self.comboBox_6)
        self.lineEdit_7 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_7.setObjectName("lineEdit_7")
        self.formLayout.setWidget(5,self.lineEdit_7)
        self.comboBox_7 = QtWidgets.QComboBox(self.widget)
        self.comboBox_7.setObjectName("comboBox_7")
        self.formLayout.setWidget(5,self.comboBox_7)
        self.lineEdit_8 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_8.setObjectName("lineEdit_8")
        self.formLayout.setWidget(6,self.lineEdit_8)
        self.comboBox_8 = QtWidgets.QComboBox(self.widget)
        self.comboBox_8.setObjectName("comboBox_8")
        self.formLayout.setWidget(6,self.comboBox_8)
        self.lineEdit_9 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_9.setObjectName("lineEdit_9")
        self.formLayout.setWidget(7,self.lineEdit_9)
        self.comboBox_9 = QtWidgets.QComboBox(self.widget)
        self.comboBox_9.setObjectName("comboBox_9")
        self.formLayout.setWidget(7,self.comboBox_9)
        self.lineEdit_10 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_10.setObjectName("lineEdit_10")
        self.formLayout.setWidget(8,self.lineEdit_10)
        self.comboBox_10 = QtWidgets.QComboBox(self.widget)
        self.comboBox_10.setObjectName("comboBox_10")
        self.formLayout.setWidget(8,self.comboBox_10)
        self.lineEdit_11 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_11.setObjectName("lineEdit_11")
        self.formLayout.setWidget(9,self.lineEdit_11)
        self.comboBox_11 = QtWidgets.QComboBox(self.widget)
        self.comboBox_11.setObjectName("comboBox_11")
        self.formLayout.setWidget(9,self.comboBox_11)

        self.retranslateUi(Dialog)
        self.buttonBox.accepted.connect(Dialog.accept)
        self.buttonBox.rejected.connect(Dialog.reject)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self,Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog","Dialog"))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...