[英]How to open second window from main dialog window with pyqt5 and qt designer
[英]How to manage second window from main window in python pyqt5
首先,我要謝謝你。
我正在使用:Python 3.6和3.7 64bit-Win10 64bit-PyQT 5.6.11
我使用qt-designer為PyQT創建了三個窗口:
qt_main.py
qt_second.py
qt_third.py
qt_4th
qt_5th
etc...
我在qt_main
添加了兩個按鈕,用於打開第二個和第三個窗口。 當我單擊btn_newUser
中的qt_main
,第二個窗口打開沒有問題。
但是:顯示第二個窗口后,我想從qt_main
窗口管理第二個窗口。 或本身(如果您有解決方案)
注意:當我從qt_main
打開第二個窗口時,是否可以從自身管理第二個窗口!
如何在qt_main
窗口中管理第二個窗口的信號/插槽!
qt_main.py
:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setWindowModality(QtCore.Qt.NonModal)
MainWindow.setEnabled(True)
MainWindow.resize(450, 350)
<...skipped...>
<...skipped...>
self.btn_newUser.setObjectName("btn_newUser")
self.btn_newUser.clicked.connect(self.window_newUser) ##2nd window.
<...skipped...>
<...skipped...>
def window_newUser(self):
# 2nd window is opened without problem.
self.Second_MainWindow = QtWidgets.QMainWindow()
ui = qt_second.Ui_Second_MainWindow()
ui.setupUi(self.Second_MainWindow)
self.Second_MainWindow.show()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
app.setStyle("fusion")
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
qt_second.py
:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Second_MainWindow(object):
def setupUi(self, Second_MainWindow):
Second_MainWindow.setObjectName("Second_MainWindow")
Second_MainWindow.setWindowModality(QtCore.Qt.NonModal)
<...skipped...>
<...skipped...>
self.txt_username.setObjectName("txt_username")
<...skipped...>
<...skipped...>
self.btn_save_info.setObjectName("btn_save_info") ##I want to fetch the content of txt_username then validate it and send it to DB.
<...skipped...>
<...skipped...>
# I commented it to show this window from qt_main window.
'''
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle("fusion")
Second_MainWindow = QtWidgets.QMainWindow()
ui = Ui_Second_MainWindow()
ui.setupUi(Second_MainWindow)
Second_MainWindow.show()
sys.exit(app.exec_())
'''
我試圖在btn_save_info
(第二個窗口)中編寫一種用於處理Click-Acttion的測試方法/函數,但出現錯誤:
Traceback (most recent call last):
File ".\qt_main.py", line 211, in window_newUser
Second_MainWindow.btn
NameError: name "Second_MainWindow" is not defined
def save_info(self):
QtWidgets.QMessageBox.information(Second_MainWindow, "Plz", "Hi Test", QtWidgets.QMessageBox.Ok)
我感到困惑和疲倦。 我該如何解決這個問題! 問題的根本原因在哪里!
提前致謝。
Greeeeetings!
我發現可以通過以下在main.py(1st window)中聲明的方法/函數從第一窗口(main.py)管理第二窗口:
def window_newUser(self):
self.Second_MainWindow = QtWidgets.QMainWindow()
self.ui2 = qt_second.Ui_Second_MainWindow()
self.ui2.setupUi(self.Second_MainWindow)
self.Second_MainWindow.show()
# I added below line to 2nd-windows-manager in main.py:
self.ui2.btn_save_info.clicked.connect(self.func_save_info)
# I wrote below func in main.py. not in 2nd window.
# and when I clicked on BTN, I got pop message.
def func_save_info(self):
QtWidgets.QMessageBox.information(self.Second_MainWindow, "لاع", "لط و رمزقت وامیید.", QtWidgets.QMessageBox.Ok)
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.