Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 程序启动时打开的窗口错误_Python_Python 3.x_Pyqt_Pyqt5 - Fatal编程技术网

Python 程序启动时打开的窗口错误

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

我正在制作一个pyqt程序来注册和授权用户。我希望有一个带有按钮的开始窗口,当单击该按钮时,将打开授权窗口或注册窗口。但是,例如,当我导入注册模块时,注册窗口将打开,而不是主窗口。你能告诉我哪里出错了吗

主要模块:

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()阻止时。您是对的。重新编写以使其更清晰。非常感谢!