问题描述
我在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 (将#修改为@)