1

你好美丽的人!

我正在尝试围绕 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))
4

0 回答 0