我经历了类似问题的各种帖子,也尝试了答案,但对我没有用。所以这是我的问题-
我有两个窗口-TestBox和MailBox,当我单击TestBox按钮以及Input Path参数时,它必须打开Mailbox窗口,当我关闭MailBox窗口时,Mailbox会再次将ModifiedPath发送到TestBox,这是新窗口
我已经在PyQt5工具中创建了两个窗口并创建了ui文件,然后使用-python -m PyQt5.uic.pyuic testboxui.ui -o testboxui.py将其转换为Python文件>]
我没有触摸testboxui.py或mailboxui.py文件,因为他们继续更改通过重新转换完成的任何修改。相反,我创建了另一个文件TestBox.py和MailBox.py来导入和编写函数。
这里是可生产的最小代码-
TestBox.py [主要应用代码]
import os,sys from PyQt5 import QtWidgets, QtGui, QtCore from testboxui import Ui_TestBox from MailBox import AppWindow_MailList app = QtWidgets.QApplication(sys.argv) class AppWindow_MainBox(QtWidgets.QMainWindow): def __init__(self): super(AppWindow_MainBox, self).__init__() self.ui = Ui_TestBox() self.ui.setupUi(self) self.ui.openbox.clicked.connect(self.fcn_maillist) def fcn_maillist(self): GetPath = os.getcwd() dialog = AppWindow_MailList(self,GetPath) if dialog.exec_() == AppWindow_MailList.Accepted: GetPath = dialog.get_output() def main(): app = QtWidgets.QApplication(sys.argv) application = AppWindow_MainBox() application.show() sys.exit(app.exec_()) if __name__ == '__main__': main()
testboxui.py [由PyQt5工具直接从UI文件生成]
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_TestBox(object): def setupUi(self, TestBox): TestBox.setObjectName("TestBox") TestBox.resize(647, 279) self.centralwidget = QtWidgets.QWidget(TestBox) self.centralwidget.setObjectName("centralwidget") self.openbox = QtWidgets.QPushButton(self.centralwidget) self.openbox.setGeometry(QtCore.QRect(210, 60, 231, 91)) self.openbox.setObjectName("openbox") TestBox.setCentralWidget(self.centralwidget) self.retranslateUi(TestBox) QtCore.QMetaObject.connectSlotsByName(TestBox) def retranslateUi(self, TestBox): _translate = QtCore.QCoreApplication.translate TestBox.setWindowTitle(_translate("TestBox", "TestBox")) self.openbox.setText(_translate("TestBox", "Click Here \n""To Open Another Window"))
MailBox.py [子应用程序代码]
import os,sys from PyQt5 import QtWidgets, QtGui, QtCore from maillistui import Ui_MailList app = QtWidgets.QApplication(sys.argv) class AppWindow_MailList(QtWidgets.QMainWindow): def __init__(self,RcvPath=''): super(AppWindow_MailList, self).__init__() self.ui = Ui_MailList() self.ui.setupUi(self) self.init_fcn(RcvPath) def init_fcn(self,RcvPath): self.ui.browse.clicked.connect(self.browse_fcn) if not RcvPath: self.RcvPath = os.getcwd() else: self.RcvPath = RcvPath self.ui.path.setText(self.RcvPath) def closeEvent(self, event): event.accept() def get_output(self): return os.path.join(self.RcvPath,'TestFolder') def browse_fcn(self): pass def main(): app = QtWidgets.QApplication(sys.argv) application = AppWindow_MailList() application.show() sys.exit(app.exec_()) if __name__ == '__main__': main()
maillistui.py-[由PyQt5直接从ui文件生成]
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MailList(object): def setupUi(self, MailList): MailList.setObjectName("MailList") MailList.resize(647, 279) self.centralwidget = QtWidgets.QWidget(MailList) self.centralwidget.setObjectName("centralwidget") self.path = QtWidgets.QLineEdit(self.centralwidget) self.path.setGeometry(QtCore.QRect(50, 30, 511, 41)) self.path.setObjectName("path") self.browse = QtWidgets.QPushButton(self.centralwidget) self.browse.setGeometry(QtCore.QRect(450, 90, 112, 41)) self.browse.setObjectName("browse") MailList.setCentralWidget(self.centralwidget) self.retranslateUi(MailList) QtCore.QMetaObject.connectSlotsByName(MailList) def retranslateUi(self, MailList): _translate = QtCore.QCoreApplication.translate MailList.setWindowTitle(_translate("MailList", "MailList")) self.browse.setText(_translate("MailList", "Browse"))
[以前,我曾经使用QtWidgets.QDialog制作PyQt5对话框,我可以轻松地将其加载到QtWidgets.QApplication中。但是,这两个都是QApplication(QMainWindow),但是很难在UI中调用ui。
我在这里做错什么吗???
我经历了类似问题的各种帖子,也尝试了答案,但对我没有用。所以这是我的问题-我有两个窗口-TestBox和...
仅应创建一个QApplication,对于您不必要地为每个脚本创建2个脚本,请消除以下代码: