单击按钮时pyQt4绘制一个矩形
pyQt4 drawing a rectangle when a button is clicked
Objective
我试图在单击按钮时在我的 window 中绘制一个矩形。
问题
当我使用按钮允许绘制矩形时,它会在按钮后面绘制矩形:
Rectangle behind button image
如果我最小化然后重新打开 window 它会正确绘制矩形,所以我认为这是焦点问题,但是当我尝试更改焦点时它没有帮助。
编辑:在单击按钮时对原始 window 进行一些操作会在正确的位置绘制矩形。例如:
self.setStyleSheet("background-color: black; color: white")
虽然这是一个非常混乱的解决方案。
代码
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
draw = False
def __init__(self):
super(Example, self).__init__()
self.initUI()
self.test = self
def initUI(self):
self.setGeometry(400, 400, 400, 400)
qbtn = QtGui.QPushButton('Paint', self)
qbtn.clicked.connect(self.buttn)
qbtn.resize(qbtn.sizeHint())
qbtn.move(50, 50)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Paint')
self.show()
def paintEvent(self, e):
qp = QtGui.QPainter()
qp.begin(self)
self.drawRectangles(qp)
qp.end()
def drawRectangles(self, qp):
if self.draw:
qp.setBrush(QtGui.QColor(000, 000, 255))
qp.drawRect(0, 0, 90, 60)
@QtCore.pyqtSlot()
def buttn(self):
self.draw = True
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
下面的方法似乎行得通,而且看起来不太乱:
self.update()
Objective
我试图在单击按钮时在我的 window 中绘制一个矩形。
问题
当我使用按钮允许绘制矩形时,它会在按钮后面绘制矩形: Rectangle behind button image
如果我最小化然后重新打开 window 它会正确绘制矩形,所以我认为这是焦点问题,但是当我尝试更改焦点时它没有帮助。
编辑:在单击按钮时对原始 window 进行一些操作会在正确的位置绘制矩形。例如:
self.setStyleSheet("background-color: black; color: white")
虽然这是一个非常混乱的解决方案。
代码
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
draw = False
def __init__(self):
super(Example, self).__init__()
self.initUI()
self.test = self
def initUI(self):
self.setGeometry(400, 400, 400, 400)
qbtn = QtGui.QPushButton('Paint', self)
qbtn.clicked.connect(self.buttn)
qbtn.resize(qbtn.sizeHint())
qbtn.move(50, 50)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Paint')
self.show()
def paintEvent(self, e):
qp = QtGui.QPainter()
qp.begin(self)
self.drawRectangles(qp)
qp.end()
def drawRectangles(self, qp):
if self.draw:
qp.setBrush(QtGui.QColor(000, 000, 255))
qp.drawRect(0, 0, 90, 60)
@QtCore.pyqtSlot()
def buttn(self):
self.draw = True
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
下面的方法似乎行得通,而且看起来不太乱:
self.update()