介紹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