2017-01-05 5 views
1

私は、GUIのスタックウィジェットのページの1つに図を描画しようとしていました。私はこのような画家のクラスをしている :その後、私は、私は画家のクラスを呼び出す私の積み重ねウィジェット上のいずれかのページを持つクラスを持っているQPaintEventはstackedWidgetにペイントするときにQLineEditを無効にします - PyQt

class Painter(QtGui.QWidget): 
    def __init__(self): 
     super(Painter, self).__init__() 

    def paintEvent(self, e): 
     qp = QtGui.QPainter(self) 
     self.draw_lines(qp) 

    def draw_lines(self, qp): 
     pen = QtGui.QPen(QtCore.Qt.blue, 2, QtCore.Qt.SolidLine) # draw graph 
     qp.setPen(pen) 
     qp.drawLine(80, 209, 150, 209) 
     qp.drawLine(150, 209, 220, 60) 
     qp.drawLine(430, 60, 500, 209) 
     qp.drawLine(500, 209, 570, 209) 
     qp.drawLine(220, 60, 430, 60) 

# create page 2 
self.page_2 = QtGui.QWidget() 
self.main_layout = QtGui.QGridLayout() 
self.page_2.setLayout(self.main_layout) 

# create group box 
self.group_box = QtGui.QGroupBox(self.page_2) 

# add plot diagram 
self.PaintPanel = diagram.Painter() 
self.PaintPanel.close() 
self.main_layout.addWidget(self.PaintPanel, 0, 0) 

# set text field 
self.text = QtGui.QLineEdit(self.group_box) 
self.text.setGeometry(QtCore.QRect(160, 330, 41, 21)) 

self.stackedWidget.addWidget(self.page_2) 

私の問題は、にQLineEditになるということですペインタクラスウィジェットを追加すると、非アクティブ(ブロック/フリーズ?)になります。これがなければ、QLineEditは正常に動作します。私はなぜそれが問題なのか、これをどうやって解決するのだろうか?どんな助けでも大歓迎です。ありがとう

答えて

1

ペインタはQWidgetであり、QLineEditの上に載っているので、Painterはすべてのマウスイベントを取得します。 QLineEditの上にペイントしたい場合は、QLineEditのサブクラス化とそのペイントメソッドのオーバーライドをお勧めします。

私は、QWidgetの代わりにPainterをイベントフィルターにして、QLineEditペイントイベントをインターセプトすることもできると考えていましたが、PainterペイントとQLineEditを最初に持っていると思います。それはおそらくあなたが望むものではありません。

+0

申し訳ありません。ありがとう、私はどこに私のエラーがあるか理解しています。だから、私はそれが似ていることを望んでいます:ダイアグラムが座っていないようにページの上にPainterクラスによって描画されたダイアグラム(例えば、QFrameなどでペイントされたもの)とページの一番下にあるQLineEditもうQLineEdit。それをどのようにアーカイブすることができますか?どんなヒントも助けになるでしょう:) – nela

+0

私はそれを今考え出しました。あなたの助けをありがとう@goug – nela

+0

あなたは大歓迎です。うれしいことはうれしいです。 – goug

関連する問題