[英]PyQT5 and Python3 “exit(a.exec_())” NameError: name 'a' is not defined
我是python的新手,正在嘗試學習為樹莓派編寫GUI。 我目前正在關注在線教程,以在QT設計器中創建GUI。 我的QT設計師有一個自定義窗口小部件,我從另一個開發人員添加了該窗口小部件以在GUI中顯示LED。 小部件/模塊是qledplugin.py,保存在qt5.plugins.designer下的“ python”文件夾中,我將qled.py保存在.local.lib.python3.5.site-packages下。
我創建了一個基本的GUI,並將文件另存為mainwindow.ui。 我使用pyuic將其轉換為python3並另存為mainwindow.py。 然后,我編寫了一個名為main.py的基本主程序以啟動GUI。 沒有功能,它應該只加載我在窗口中創建的GUI。 我遇到的問題是,當我運行python3 main.py
,出現以下錯誤
myself@my-own-computer:~/Programming/Projects/GenUi$ python3 main.py
Traceback (most recent call last):
File "main.py", line 6, in <module>
import mainwindow
File "/home/clint/Programming/Projects/GenUi/mainwindow.py", line 86, in <module>
from qled import QLed
File "/home/clint/.local/lib/python3.5/site-packages/qled.py", line 398, in <module>
exit(a.exec_())
NameError: name 'a' is not defined
發生錯誤的qled.py代碼是
if __name__=="__main__":
from sys import argv, exit
import sys
class Test(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setWindowTitle("QLed Test")
_l=QGridLayout()
self.setLayout(_l)
self.leds=[]
for row, shape in enumerate(QLed.shapes.keys()):
for col, colour in enumerate(QLed.colours.keys()):
if colour==QLed.Grey: continue
led=QLed(self, onColour=colour, shape=shape)
_l.addWidget(led, row, col, Qt.AlignCenter)
self.leds.append(led)
self.toggleLeds()
def toggleLeds(self):
for led in self.leds: led.toggleValue()
QTimer.singleShot(1000, self.toggleLeds)
a = QApplication(sys.argv)
t = Test()
t.show()
t.raise_()
exit(a.exec_())
在qled.py的代碼頂部
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QSizePolicy, QStyleOption
from PyQt5.QtCore import pyqtSignal, Qt, QSize, QTimer, QByteArray, QRectF, pyqtProperty
from PyQt5.QtSvg import QSvgRenderer
from PyQt5.QtGui import QPainter
main.py的代碼是
import sys
import PyQt5
from PyQt5.QtWidgets import *
import mainwindow
class MainWindow(QMainWindow, mainwindow.Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
def main():
app = QApplication(sys.argv)
form = MainWindow()
form.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
“ a”在退出之前就已定義,但程序仍將其視為未定義。 自從python3是用python2.7編寫的以來,我確實不得不修改一些東西,但是我是python的新手,也許我錯過了一些東西。 所有幫助表示贊賞。
Python對縮進非常嚴格。 在兩種情況下,您都沒有尊重它。 在第一種情況下,出口(a.exec_())
與if __name __ == "__ main__":
處於同一級別,該if __name __ == "__ main__":
應在內部。 在另一種情況下:
def main():
app = QApplication(sys.argv)
form = MainWindow()
form.show()
它與類的功能處於同一級別,這是一個嚴重的錯誤,因為它不是類的方法。 您必須將其移出。
qled.py
if __name__=="__main__":
from sys import argv, exit
import sys
class Test(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setWindowTitle("QLed Test")
_l=QGridLayout()
self.setLayout(_l)
self.leds=[]
for row, shape in enumerate(QLed.shapes.keys()):
for col, colour in enumerate(QLed.colours.keys()):
if colour==QLed.Grey: continue
led=QLed(self, onColour=colour, shape=shape)
_l.addWidget(led, row, col, Qt.AlignCenter)
self.leds.append(led)
self.toggleLeds()
def toggleLeds(self):
for led in self.leds: led.toggleValue()
QTimer.singleShot(1000, self.toggleLeds)
a = QApplication(sys.argv)
t = Test()
t.show()
t.raise_()
exit(a.exec_())
main.py
import sys
import PyQt5
from PyQt5.QtWidgets import *
import mainwindow
class MainWindow(QMainWindow, mainwindow.Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
def main():
app = QApplication(sys.argv)
form = MainWindow()
form.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.