【发布时间】:2019-01-08 10:10:05
【问题描述】:
简介
我在尝试学习 PyQt5 时遇到了一个问题。
到目前为止,在我寻找答案和理解问题的过程中,我大多是空手而归。我发现很多链接和帖子根本不适用于 python 甚至 Qt5,这并不奇怪,因为 SIGABRT 适用于内存分配等的多个方面(如果我错了,请纠正我)。
我相当肯定该错误源于与
类似的行buttonEnv.clicked.connect(lambda: self.btnClicked(buttonEnv))
但无法找到或弄清楚它是什么。可能是因为我对python的了解不够。
系统
-OS:Arch linux (Manjaro) 4.9.27-1-MANJARO
-IDE:Pycharm 2017.1
-Python 版本:3.6
-使用:PyQt5
我遇到了错误
/usr/bin/python3.6 /opt/pycharm-community/helpers/pydev/pydevd.py --multiproc --qt-support --client 127.0.0.1 --port 42749 --file /home/alpeace/Documents/git_reps/project-tardis/main.py pydev 调试器: 进程22588正在连接
连接到 pydev 调试器(内部版本 171.4249.47)
进程以退出代码 134 结束(被信号 6:SIGABRT 中断)
我的代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QGridLayout,\
QBoxLayout, QPushButton, QWidget, QSizePolicy
from PyQt5.QtGui import QIcon
class HomeScreen(QWidget):
clickedBtn = ''
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.clickedBtn = ''
homeBtnLayout = QGridLayout()
self.setLayout(homeBtnLayout)
buttonEnv = QPushButton('Environment')
buttonEnv.clicked.connect(lambda: self.btnClicked(buttonEnv))
buttonEnv.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
buttonMedia = QPushButton('Media')
buttonMedia.clicked.connect(lambda: self.btnClicked(buttonMedia))
buttonMedia.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
buttonInv = QPushButton('Inventory')
buttonInv.clicked.connect(lambda: self.btnClicked(buttonInv))
buttonInv.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
buttonSched = QPushButton('Schedual')
buttonSched.clicked.connect(lambda: self.btnClicked(buttonSched))
buttonSched.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
homeBtnLayout.addWidget(buttonEnv, 0, 0)
homeBtnLayout.addWidget(buttonMedia, 0, 1)
homeBtnLayout.addWidget(buttonInv, 1, 0)
homeBtnLayout.addWidget(buttonSched, 1, 1)
self.move(300, 150)
self.show()
def btnClicked(self, btnName):
self.clickedBtn = btnName.text()
btnName.disconnect()
def getClickedBtn(self):
return self.clickedBtn
class MainWindow(QMainWindow):
screenHome = HomeScreen()
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 250)
self.setWindowTitle('Home')
self.screenHome = HomeScreen()
self.setCentralWidget(self.screenHome)
self.show()
def changeWindow(self):
newWindow = self.screenHome.getClickedBtn()
if newWindow == 'Environment':
print(newWindow)
elif newWindow == 'Media':
print(newWindow)
elif newWindow == 'Inventory':
print(newWindow)
elif newWindow == 'Schedual':
print(newWindow)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
无论如何,感谢您的阅读,我希望有人可以帮助我。如果需要更多信息,我很乐意提供,但据我所知,这应该足够了。
【问题讨论】:
-
在发布模式下/从 CLI 运行时是否获得 SIGABRT?
-
当从命令行运行时,我得到以下“QWidget:必须在 QWidget 中止(核心转储)之前构造一个 QApplication”。更改代码以首先构造 QApplication 会给我带来其他错误,因为类未定义等。这就是我对 python 缺乏经验的遗憾。
标签: linux python-3.x pyqt5