【发布时间】:2017-01-05 17:52:49
【问题描述】:
我是 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 python-3.x pyqt pyqt5 qt-designer