介绍Python 3.6; PyQt5; arch linux;通过信号中断6:SIGABRT
您好,我是一个长期的潜伏者,但第一次的海报。 我在尝试学习PyQt5时遇到了一个问题。
到目前为止,在我对这个问题的回答和理解方面,我大都空手而归。我发现很多链接和帖子并不适用于python甚至Qt5,这并不奇怪,因为SIGABRT适用于内存分配等几个方面(纠正我,如果我错了)。
我相当肯定的是,错误从线,如茎和类似
buttonEnv.clicked.connect(拉姆达: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支持--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_())
不管怎么说,感谢您的阅读,我希望有人也许能够帮助我。如果需要更多信息,我会很乐意提供,但据我所知,这应该足够了。
问候Alpeace
当您以发行模式/从CLI运行时,您是否获得了SIGABRT? – Paul92
当从命令行运行时,我得到“QWidget:必须在QWidget中止之前构建QApplication(核心转储)”。改变代码来构造QApplication首先会给我带来其他错误,因为类未定义等。这是我对python的缺乏经验可悲的地方。 – Alpeace