カスタム ウィジェットを使用してインターフェイスを構築しようとしていますが、次の問題が発生しました。
Rectangle
インターフェイスでインタラクティブな要素として使用したいウィジェットがあります。四角形を定義するには、親を指定するだけでよいので、描画するウィンドウと、[x,y, width, height]
その位置とサイズを定義する位置を知ることができます。(「絶対配置ではなくレイアウトを使用する必要がある」と言う人もいると思いますが、この特定のアプリケーションには絶対配置が必要であると 100% 確信しています)。
from PySide.QtCore import *
from PySide.QtGui import *
import sys
class Rectangle(QWidget):
def __init__(self, parent, *args):
super(self.__class__,self).__init__(parent)
print parent, args
#expect args[0] is a list in the form [x,y,width,height]
self.setGeometry(*args[0])
def enterEvent(self, e):
print 'Enter'
def leaveEvent(self, e):
print 'Leave'
def paintEvent(self, e):
print 'Painted: ',self.pos
painter = QPainter(self)
painter.setPen(Qt.NoPen)
painter.setBrush(QColor(200,100,100))
painter.drawRect(0,0,self.width()-1, self.height()-1)
painter.end()
またWindow
、ビジュアライゼーションが描画されるキャンバスであるウィジェットもあります。の定義では、20,40 に長方形 A を作成Window
します。__init__()
class Window(QWidget):
def __init__(self):
super(self.__class__, self).__init__()
self.widgets = [Rectangle(self,[20,40,100,80])]
self.setMouseTracking(True)
self.setGeometry(300,300,800,600)
self.setWindowTitle('Window')
self.show()
def addWidget(self,Widget, *args):
self.widgets += [Widget(self, *args)]
self.update()
def mousePressEvent(self, e):
for widget in self.widgets:
print widget.geometry()
私はビジュアライゼーションを構築しているWindow
ので、後でウィジェットを作成して追加したいので、インスタンスを作成しますmWindow
。これには、既に四角形 Aが定義されているはずです。次に、ウィンドウのメソッドを使用して 200,200 に 2 番目の四角形を追加します。これを四角形 BaddWidget()
と呼びます。
if __name__ == "__main__":
app= QApplication(sys.argv)
mWindow = Window()
mWindow.addWidget(Rectangle, [200,200,200,80])
sys.exit(app.exec_())
私が抱えている問題は、長方形 Aのみが実際に描画されることです。
コンストラクターの の出力により、長方形 A と **長方形 B の両方がインスタンス化され、両方がmyWindow
親ウィジェットとして存在することがわかっています。print parent
Rectangle
ただし、ウィンドウのサイズを変更して強制的に再描画させると、メソッドは四角形 Bではなく四角形ApaintEvent()
でのみ呼び出されます。私は何が欠けていますか?