你好美丽的人!
我正在尝试围绕 PyQt4(以前从未进行过 GUI 编程),所以我采用了这个示例代码,现在我正在尝试制作一个可以动态调整的 QLabel。我知道我需要使用 QtGui.QLabel 创建一个标签,并且我需要使用 setText() 方法对其进行调整。
所以我创建了一个名为 myLabelClass() 的新类,它或多或少类似于代码中动态调整 matplotlib 图像的另一个类。然而,下面的代码给了我一个 AttributeError:“myLabelClass”对象没有属性“main_widget”。我想我需要在初始 Canvas 类中创建 QLabel 对象,为此我需要 main_widget。
所以现在我完全迷路了。我搞砸了几个小时并尝试了各种各样的东西,但我无法让它工作。我或多或少地理解为什么它不起作用,但我不知道如何才能使它真正起作用。有谁知道或有某种指针指向我可以做些什么来创建标签并使用我的 countUp() 方法更新它?
欢迎所有提示!
[编辑] 感谢卢克伍德沃德的提示,我改变了
QtGui.QLabel(self.text, self.main_widget)
至
QtGui.QLabel(self.text, self)
所以至少它现在运行(WOOHOOO!)。我将我发布的大量旧代码移至此处的 pastebin。我在这里有我当前的完整工作代码。我现在更了解图表画布的来源:matplotlib.backends.backend_qt4agg.FigureCanvasQTAgg,它是 MyMplCanvas() 类的子类。
所以我需要找到除 FigureCanvas 之外的其他子类,我需要摆脱所有 matplotlib 图形的东西。我想知道的是我需要继承哪个类..?我现在有以下代码:
class MyTextCanvas(FigureCanvas):
"""Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
# We want the axes cleared every time plot() is called
self.axes.hold(False)
self.compute_initial_figure()
FigureCanvas.__init__(self, fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
########### I added these things below
self.text = 'this is the initial text'
self.create_initial_text()
###########
def compute_initial_figure(self):
pass
def create_initial_text(self):
pass
class myLabelClass(MyTextCanvas):
"""This is my own creaed class which more or less resembles the code above."""
def __init__(self, *args, **kwargs):
MyTextCanvas.__init__(self, *args, **kwargs)
timer = QtCore.QTimer(self)
QtCore.QObject.connect(timer, QtCore.SIGNAL('timeout()'), self.countUp)
timer.start(1000)
def create_initial_text(self):
QtGui.QLabel(self.text, self)
def countUp(self):
for i in xrange(100):
self.myShinyLabel.setText(str(i))