こんにちはビューティフルピープル!
私は PyQt4 に頭を悩ませようとしています (これまで GUI プログラミングを行ったことはありません) ので、このサンプル コードを使用して、動的に調整できる QLabel を作成しようとしています。QtGui.QLabel を使用してラベルを作成する必要があり、setText() メソッドを使用してラベルを調整する必要があることはわかっています。
そこで、matplotlib イメージを動的に調整するコード内の別のクラスに多かれ少なかれ似ている myLabelClass() という新しいクラスを作成しました。ただし、以下のコードでは AttributeError: 'myLabelClass' オブジェクトに属性 'main_widget' がありません。ただし、最初の Canvas クラスで QLabel オブジェクトを作成する必要があると思います。そのためには main_widget が必要です。
だから今、私は完全に迷っています。私は何時間もいじり、あらゆる種類のことを試しましたが、うまくいきません。うまくいかない理由はだいたい理解できますが、実際にどうすればうまくいくのかわかりません。ラベルを作成して countUp() メソッドで更新するためにできることを誰かが知っているか、何らかのポインタを持っていますか?
すべてのヒントは大歓迎です!
[編集] Luke Woodward のヒントのおかげで変更できました
QtGui.QLabel(self.text, self.main_widget)
に
QtGui.QLabel(self.text, self)
したがって、少なくとも現在は実行されます (WOOOOOO!)。投稿した大量の古いコードをこちらのペーストビンに移動しました。私は現在の完全な作業コードをここに持っています。チャートキャンバスがどこから来たのか、もう少し理解できるようになりました: MyMplCanvas() クラスでサブクラス化された matplotlib.backends.backend_qt4agg.FigureCanvasQTAgg
したがって、その 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))