单击主窗口PyQt5 Python中的按钮时打开的窗口

问题描述 投票:1回答:1

我经历了类似问题的各种帖子,也尝试了答案,但对我没有用。所以这是我的问题-

我有两个窗口-TestBox和MailBox,当我单击TestBox按钮以及Input Path参数时,它必须打开Mailbox窗口,当我关闭MailBox窗口时,Mailbox会再次将ModifiedPath发送到TestBox,这是新窗口

  1. 我已经在PyQt5工具中创建了两个窗口并创建了ui文件,然后使用-python -m PyQt5.uic.pyuic testboxui.ui -o testboxui.py将其转换为Python文件>]

  2. 我没有触摸testboxui.py或mailboxui.py文件,因为他们继续更改通过重新转换完成的任何修改。相反,我创建了另一个文件TestBox.py和MailBox.py来导入和编写函数。

  3. 这里是可生产的最小代码-

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和...

python user-interface pyqt pyqt5
1个回答
2
投票

仅应创建一个QApplication,对于您不必要地为每个脚本创建2个脚本,请消除以下代码:

© www.soinside.com 2019 - 2024. All rights reserved.