1

押しボタン付きの窓があります。ボタンをクリックすると、最初に描画される線の位置を変更したいと思います。これは今までの私のコードです。

import sys 
from PyQt4 import QtGui , QtCore

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

    def window(self):
        self.a = 0
        button = QtGui.QPushButton('Push')
        button.setCheckable(True)
        button.clicked.connect(self.fun)
        grid = QtGui.QGridLayout()
        grid.addWidget(button , 0 , 0)
        self.setLayout(grid)
        self.setWindowTitle('Trial')
        self.setGeometry(500 , 500 , 500 , 500)
        self.show()

    def fun(self , text):
        if text == 1:
            self.a = 0

        else:
            self.a = 1


    def paintEvent(self , e):
        qp = QtGui.QPainter()
        qp.begin(self)
        pen = QtGui.QPen(QtCore.Qt.red , 5 , QtCore.Qt.SolidLine)
        qp.setPen(pen)

        if self.a == 0:

            qp.drawLine(20 , 20 , 20 , 480)
        else:
            qp.drawLine(480 , 20 , 480 , 480) 
        qp.end()


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    t = trial()
    sys.exit(app.exec_())

私のコードが少しぎこちなく見えることはわかっていますが、次の問題に直面しています。1. ボタンを押してから線の位置が変わるまでにかなりの時間がかかります。

2.また、先に描いた線をこする方法を教えてください。

誰かが私のためにコードを変更できればいいのですが。ありがとう。

4

1 に答える 1

1

1) 関数に呼び出しを追加しself.update()fun()、ウィジェットを再描画する必要があることを Qt に知らせます。

2) (Python の構文についてはよくわからないので、C++ で例を示します)

ペイント イベントで背景を明示的にペイントできます。

qp.setBrush( Qt::white );  // Or whatever color you want the background to be 
qp.drawRect( rect() );

または、 QWidget::setAutoFillBackground()をいじってみることができます

于 2012-11-14T15:30:22.603 に答える