程序启动时打开错误的window
The wrong window opens when the program starts
我正在制作一个 pyqt 程序来注册和授权用户。我想要一个开始 window 的按钮,单击这些按钮将打开授权 window 或注册 window。但是当我导入注册模块时,例如,注册 window 而不是主 window 打开。你能告诉我哪里做错了吗?
主模块:
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
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())
你的错误是混合了可执行代码和库代码。
当你import registration
在您的主模块中,这将执行 registration.py
文件。
这意味着它将 运行 该文件中的每一行代码,包括 application2.show()
和 sys.exit()
。这意味着 import registration
步骤永远不会完成,因为导入它的行为 运行s application2.show()
,它会阻塞,直到您关闭注册 window。然后,它会运行sys.exit()
,退出程序。
我猜您的意图是注册模块的最后四行只有在您手动 运行 脚本时才会执行,以进行测试。 python 中内置了一种机制,即 if __name__ == "__main__"
机制。
这应该可以修复您的代码:
主模块:
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)
def main():
app2 = QtWidgets.QApplication([])
application2 = mywindow()
application2.show()
sys.exit(app2.exec())
if __name__ == "__main__":
main()
其背后的原因是,每当您 运行 直接使用 python3 file.py
一个 python 文件时,变量 __name__
将设置为 "__main__"
以发出信号它现在被执行的文件。所以 __name__ == "__main__"
不是 hack,而是官方的 python 机制。
我正在制作一个 pyqt 程序来注册和授权用户。我想要一个开始 window 的按钮,单击这些按钮将打开授权 window 或注册 window。但是当我导入注册模块时,例如,注册 window 而不是主 window 打开。你能告诉我哪里做错了吗?
主模块:
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
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())
你的错误是混合了可执行代码和库代码。
当你import registration
在您的主模块中,这将执行 registration.py
文件。
这意味着它将 运行 该文件中的每一行代码,包括 application2.show()
和 sys.exit()
。这意味着 import registration
步骤永远不会完成,因为导入它的行为 运行s application2.show()
,它会阻塞,直到您关闭注册 window。然后,它会运行sys.exit()
,退出程序。
我猜您的意图是注册模块的最后四行只有在您手动 运行 脚本时才会执行,以进行测试。 python 中内置了一种机制,即 if __name__ == "__main__"
机制。
这应该可以修复您的代码:
主模块:
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)
def main():
app2 = QtWidgets.QApplication([])
application2 = mywindow()
application2.show()
sys.exit(app2.exec())
if __name__ == "__main__":
main()
其背后的原因是,每当您 运行 直接使用 python3 file.py
一个 python 文件时,变量 __name__
将设置为 "__main__"
以发出信号它现在被执行的文件。所以 __name__ == "__main__"
不是 hack,而是官方的 python 机制。