Python 当我尝试打开自定义导入的 PyQt5 时崩溃 window class
Python crashes when I try to open a custom imported PyQt5 window class
在 Python 方面,我有点菜鸟,PyQt5 更是如此。话虽如此,我不确定如何处理我遇到的错误,我希望有人能在这里给我一些智慧。
我正在尝试将外部测试 PyQt5 window 脚本文件连接到我的主要 GUI 结构。我制作了一个简单的下拉菜单 GUI,带有一个按钮,该按钮应该 运行 将打开另一个 window 的外部脚本。我正在尝试使用以下命令执行它:test_dropButton.action.triggered.connect(testWindowButton)
我不断收到一个有趣的错误,似乎暗示 Python 在我收到此错误时正在崩溃:
Process finished with exit code -1073740791 (0xC0000409)
并且根据我的研究,这意味着我可以做很多事情,从尝试调用不存在的函数到 PyQt5 没有正确抛出异常。我不确定是不是因为我的自定义 window 脚本没有简单调用 window 以在屏幕上显示的函数,但是我的 init 方法应该在 class 被调用时这样做,还是我只是犯了错误而忘记了我首先需要一个构造函数?
我还看到将此错误解释为线程问题,其中尝试 运行 外部脚本可能会导致 Python 由于线程问题而崩溃。也许我需要多线程外部 python 脚本?
不管怎样,谁能给我解释一下上面的错误,并告诉我到底发生了什么,为什么会崩溃?
这是我的代码:
#This is a snippet of my main GUI structure
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import TrainHelloWorld as hi
mainMenu = self.menuBar()
trainMenu = mainMenu.addMenu('Test')
testWindowButton = hi.Greeting()
test_dropButton = QAction('test', self)
test_dropButton.setShortcut('Ctrl+T')
test_dropButton.setStatusTip('Test the button')
test_dropButton.action.triggered.connect(testWindowButton.show())
trainMenu.addAction(test_dropButton) # add test button to dropdown menu
这是导入的脚本:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import sys
class Greeting(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'Dummy Hello'
self.left = 10
self.top = 10
self.width = 640
self.height = 400
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
greetingLabel = QLabel()
greetingLabel.setText("You called a Python function in a QAction menu, YOU DID IT!")
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Greeting()
sys.exit(app.exec_())
我希望程序打开一个主菜单 window,其中有一个下拉菜单和一个标记为 "test" 的菜单,按钮名称 "test" 运行s打开另一个 window 的导入脚本。
试一试:
main.py
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import TrainHelloWorld as hi
class MyMainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('MyMainWindow')
mainMenu = self.menuBar()
trainMenu = mainMenu.addMenu('Test')
self.testWindowButton = hi.Greeting()
test_dropButton = QAction('test', self)
test_dropButton.setShortcut('Ctrl+T')
test_dropButton.setStatusTip('Test the button')
# test_dropButton.action.triggered.connect(testWindowButton.show())
# ------ --
test_dropButton.triggered.connect(self.testWindowButton.show) # - `.action`, - `()`
trainMenu.addAction(test_dropButton) # add test button to dropdown menu
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyMainWindow()
ex.show()
sys.exit(app.exec_())
TrainHelloWorld.py
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
class Greeting(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'Dummy Hello'
self.left = 520
self.top = 280
self.width = 640
self.height = 400
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
greetingLabel = QLabel(self) # + self
greetingLabel.setGeometry(170, 200, 300, 50) # +++
greetingLabel.setText("You called a Python function in a QAction menu, YOU DID IT!")
# --- self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Greeting()
ex.show()
sys.exit(app.exec_())
在 Python 方面,我有点菜鸟,PyQt5 更是如此。话虽如此,我不确定如何处理我遇到的错误,我希望有人能在这里给我一些智慧。
我正在尝试将外部测试 PyQt5 window 脚本文件连接到我的主要 GUI 结构。我制作了一个简单的下拉菜单 GUI,带有一个按钮,该按钮应该 运行 将打开另一个 window 的外部脚本。我正在尝试使用以下命令执行它:test_dropButton.action.triggered.connect(testWindowButton)
我不断收到一个有趣的错误,似乎暗示 Python 在我收到此错误时正在崩溃:
Process finished with exit code -1073740791 (0xC0000409)
并且根据我的研究,这意味着我可以做很多事情,从尝试调用不存在的函数到 PyQt5 没有正确抛出异常。我不确定是不是因为我的自定义 window 脚本没有简单调用 window 以在屏幕上显示的函数,但是我的 init 方法应该在 class 被调用时这样做,还是我只是犯了错误而忘记了我首先需要一个构造函数?
我还看到将此错误解释为线程问题,其中尝试 运行 外部脚本可能会导致 Python 由于线程问题而崩溃。也许我需要多线程外部 python 脚本?
不管怎样,谁能给我解释一下上面的错误,并告诉我到底发生了什么,为什么会崩溃?
这是我的代码:
#This is a snippet of my main GUI structure
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import TrainHelloWorld as hi
mainMenu = self.menuBar()
trainMenu = mainMenu.addMenu('Test')
testWindowButton = hi.Greeting()
test_dropButton = QAction('test', self)
test_dropButton.setShortcut('Ctrl+T')
test_dropButton.setStatusTip('Test the button')
test_dropButton.action.triggered.connect(testWindowButton.show())
trainMenu.addAction(test_dropButton) # add test button to dropdown menu
这是导入的脚本:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import sys
class Greeting(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'Dummy Hello'
self.left = 10
self.top = 10
self.width = 640
self.height = 400
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
greetingLabel = QLabel()
greetingLabel.setText("You called a Python function in a QAction menu, YOU DID IT!")
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Greeting()
sys.exit(app.exec_())
我希望程序打开一个主菜单 window,其中有一个下拉菜单和一个标记为 "test" 的菜单,按钮名称 "test" 运行s打开另一个 window 的导入脚本。
试一试:
main.py
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import TrainHelloWorld as hi
class MyMainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('MyMainWindow')
mainMenu = self.menuBar()
trainMenu = mainMenu.addMenu('Test')
self.testWindowButton = hi.Greeting()
test_dropButton = QAction('test', self)
test_dropButton.setShortcut('Ctrl+T')
test_dropButton.setStatusTip('Test the button')
# test_dropButton.action.triggered.connect(testWindowButton.show())
# ------ --
test_dropButton.triggered.connect(self.testWindowButton.show) # - `.action`, - `()`
trainMenu.addAction(test_dropButton) # add test button to dropdown menu
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyMainWindow()
ex.show()
sys.exit(app.exec_())
TrainHelloWorld.py
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
class Greeting(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'Dummy Hello'
self.left = 520
self.top = 280
self.width = 640
self.height = 400
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
greetingLabel = QLabel(self) # + self
greetingLabel.setGeometry(170, 200, 300, 50) # +++
greetingLabel.setText("You called a Python function in a QAction menu, YOU DID IT!")
# --- self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Greeting()
ex.show()
sys.exit(app.exec_())