我对python很陌生,并试图学习为raspberry pi编写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 QPaintermain.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()‘’是在退出之前定义的,但是程序仍然认为它是未定义的。我确实需要为python3修改一些东西,因为它是用python2.7编写的,但是我对python还不熟悉,可能我漏掉了一些东西。所有的帮助都很感激。
发布于 2017-01-05 18:41:16
Python对缩进非常严格。在这两种情况下,你都没有尊重它。在第一种情况下,退出(a.exec_())与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()https://stackoverflow.com/questions/41491591
复制相似问题