我有一个带按钮的窗口。单击按钮后,我想更改最初绘制的线的位置。这是我的代码,直到现在。
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.另外如何擦拭先前绘制的线条。
如果有人可以为我修改代码那就太好了。谢谢。
答案 0 :(得分:1)
1)在self.update()
函数中添加对fun()
的调用,让Qt知道您的小部件需要重新绘制
2)(不完全确定python语法,所以我将在C ++中给出示例)
您可以在paint事件中明确绘制背景:
qp.setBrush( Qt::white ); // Or whatever color you want the background to be
qp.drawRect( rect() );
或者你可以尝试搞乱QWidget::setAutoFillBackground()