Python 程序启动时打开的窗口错误
我正在制作一个pyqt程序来注册和授权用户。我希望有一个带有按钮的开始窗口,当单击该按钮时,将打开授权窗口或注册窗口。但是,例如,当我导入注册模块时,注册窗口将打开,而不是主窗口。你能告诉我哪里出错了吗 主要模块:Python 程序启动时打开的窗口错误,python,python-3.x,pyqt,pyqt5,Python,Python 3.x,Pyqt,Pyqt5,我正在制作一个pyqt程序来注册和授权用户。我希望有一个带有按钮的开始窗口,当单击该按钮时,将打开授权窗口或注册窗口。但是,例如,当我导入注册模块时,注册窗口将打开,而不是主窗口。你能告诉我哪里出错了吗 主要模块: from PyQt5 import QtWidgets, QtCore from start import Ui_Form #py file with start window ui properties import registration #registration modu
from PyQt5 import QtWidgets, QtCore
from start import Ui_Form #py file with start window ui properties
import registration #registration module
class StartWindow(QtWidgets.QMainWindow):
def __init__(self):
super(StartWindow, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.ui.RegButton.clicked.connect(reg_clicked())
self.openreg=registration.mywindow(self)
#self.ui.AuthButton.clicked.connect()
def reg_clicked(self):
self.openreg.show()
app = QtWidgets.QApplication([])
application = StartWindow()
application.show()
sys.exit(app.exec())
from PyQt5 import QtWidgets, QtCore
from start import Ui_Form #py file with start window ui properties
import registration #registration module
class StartWindow(QtWidgets.QMainWindow):
def __init__(self):
super(StartWindow, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.ui.RegButton.clicked.connect(reg_clicked())
self.openreg=registration.mywindow(self)
#self.ui.AuthButton.clicked.connect()
def reg_clicked(self):
self.openreg.show()
def main():
app = QtWidgets.QApplication([])
application = StartWindow()
application.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
注册模块的一部分:
from PyQt5 import QtWidgets, QtCore
import record_proc
from reg import Ui_Reg
class mywindow(QtWidgets.QMainWindow):
number_of_samples=1
def __init__(self):
super(mywindow, self).__init__()
self.ui = Ui_Reg()
self.ui.setupUi(self)
self.ui.RecordButton.clicked.connect(self.Recording)
self.ui.AuthButton.clicked.connect(self.Register)
self.ui.CheckLogin.clicked.connect(self.CheckLogin)
app2 = QtWidgets.QApplication([])
application2 = mywindow()
application2.show()
sys.exit(app2.exec())
from PyQt5 import QtWidgets, QtCore
import record_proc
from reg import Ui_Reg
class mywindow(QtWidgets.QMainWindow):
number_of_samples=1
def __init__(self):
super(mywindow, self).__init__()
self.ui = Ui_Reg()
self.ui.setupUi(self)
self.ui.RecordButton.clicked.connect(self.Recording)
self.ui.AuthButton.clicked.connect(self.Register)
self.ui.CheckLogin.clicked.connect(self.CheckLogin)
def main():
app2 = QtWidgets.QApplication([])
application2 = mywindow()
application2.show()
sys.exit(app2.exec())
if __name__ == "__main__":
main()
您的错误是将可执行代码和库代码混合在一起 当您进行
导入注册时
在主模块中,它将执行registration.py
文件。
这意味着它将运行该文件中的每一行代码,包括application2.show()
和sys.exit()
。这意味着导入注册
步骤将永远不会完成,因为导入该步骤将运行application2.show()
,直到您关闭注册窗口时才会停止。然后,它将运行sys.exit()
,退出程序
我猜您的意图是,注册模块的最后四行仅在出于测试目的手动运行脚本时才能执行。python中内置了一种机制,允许使用这种机制,即if\uuuuu name\uuuu==“\uuuu main\uuuu”
机制
这将修复您的代码:
主要模块:
from PyQt5 import QtWidgets, QtCore
from start import Ui_Form #py file with start window ui properties
import registration #registration module
class StartWindow(QtWidgets.QMainWindow):
def __init__(self):
super(StartWindow, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.ui.RegButton.clicked.connect(reg_clicked())
self.openreg=registration.mywindow(self)
#self.ui.AuthButton.clicked.connect()
def reg_clicked(self):
self.openreg.show()
app = QtWidgets.QApplication([])
application = StartWindow()
application.show()
sys.exit(app.exec())
from PyQt5 import QtWidgets, QtCore
from start import Ui_Form #py file with start window ui properties
import registration #registration module
class StartWindow(QtWidgets.QMainWindow):
def __init__(self):
super(StartWindow, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.ui.RegButton.clicked.connect(reg_clicked())
self.openreg=registration.mywindow(self)
#self.ui.AuthButton.clicked.connect()
def reg_clicked(self):
self.openreg.show()
def main():
app = QtWidgets.QApplication([])
application = StartWindow()
application.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
注册模块:
from PyQt5 import QtWidgets, QtCore
import record_proc
from reg import Ui_Reg
class mywindow(QtWidgets.QMainWindow):
number_of_samples=1
def __init__(self):
super(mywindow, self).__init__()
self.ui = Ui_Reg()
self.ui.setupUi(self)
self.ui.RecordButton.clicked.connect(self.Recording)
self.ui.AuthButton.clicked.connect(self.Register)
self.ui.CheckLogin.clicked.connect(self.CheckLogin)
app2 = QtWidgets.QApplication([])
application2 = mywindow()
application2.show()
sys.exit(app2.exec())
from PyQt5 import QtWidgets, QtCore
import record_proc
from reg import Ui_Reg
class mywindow(QtWidgets.QMainWindow):
number_of_samples=1
def __init__(self):
super(mywindow, self).__init__()
self.ui = Ui_Reg()
self.ui.setupUi(self)
self.ui.RecordButton.clicked.connect(self.Recording)
self.ui.AuthButton.clicked.connect(self.Register)
self.ui.CheckLogin.clicked.connect(self.CheckLogin)
def main():
app2 = QtWidgets.QApplication([])
application2 = mywindow()
application2.show()
sys.exit(app2.exec())
if __name__ == "__main__":
main()
其背后的原因是,每当您直接使用python3 file.py
运行python文件时,变量\uuuuu name\uuuuu
被设置为“\uuuu main\uuuuu”
,以向文件发出信号,表明它现在已被执行。所以\uuuu name\uuuu==“\uuuuu main\uuuuu”
不是黑客攻击,而是一种官方的python机制
有关更多信息,请阅读:从
registration.py
中删除最后四行,或者如果u u name\u u==“_umain”:块,则将其放入中。如果导入模块,将读取并执行所有相应的.py文件。在这种情况下,当您导入registration
时,registration.py
文件中的最后四行将创建一个QApplication
实例,创建并显示一个注册窗口并启动事件循环。确切地说,sys.exit()
直到“第二个”窗口关闭后才会退出,当它被启动Qt事件循环(并实际显示窗口)的app.exec()阻止时。您是对的。重新编写以使其更清晰。非常感谢!