python - 在 PySide2 中用协调绘制线和点
问题描述
我想通过 PySide2 画一些线和点,我按照文档提供了下面的代码,但是在我调用函数后它没有显示任何东西。
class Window2(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Deformed Structure")
self.DrawWindows = QtGui.QWindow()
self.DrawButton23 = QPushButton('Draw', self)
self.DrawButton23.setStyleSheet("Background-color: orange")
self.DrawButton23.move(100, 200)
self.DrawButton23.show()
self.DrawButton23.clicked.connect(self.PaintEvent)
def PaintEvent(self, painter):
painter = QtGui.QPainter()
painter.begin(self)
pen = QPen(Qt.green)
painter.setPen(pen)
for i in range(0, 10):
x0 = i * 30
y0 = i * 30
x1 = 100 + i * 50
y1 = 100 + i * 50
point1 = QPointF(x0, y0)
point2 = QPointF(x1, y1)
line1 = QLineF(point1, point2)
painter.drawPoint(point1)
painter.drawLine(line1)
print("OK123") #Just to check the loop, it prints 10 time
painter.end()
解决方案
你必须明白:
Python 和 C++ 区分大小写,因此paintEvent 与 PaintEvent 不同。
您不应直接调用paintEvent,而应使用update() 或repaint() 方法。
据我了解,您希望在按下按钮时执行绘画但您无法直接控制绘画,其逻辑是使用某些标志激活绘画的某个部分。
考虑到上述情况,解决方案是:
from PySide2 import QtCore, QtGui, QtWidgets
class Window2(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Deformed Structure")
self.flag = False
self.draw_button = QtWidgets.QPushButton("Draw", self)
self.draw_button.setStyleSheet("Background-color: orange")
self.draw_button.move(100, 200)
self.draw_button.clicked.connect(self.on_clicked)
def on_clicked(self):
self.flag = True
self.update()
def paintEvent(self, event):
painter = QtGui.QPainter(self)
if self.flag:
pen = QtGui.QPen(QtCore.Qt.green)
painter.setPen(pen)
for i in range(0, 10):
x0 = i * 30
y0 = i * 30
x1 = 100 + i * 50
y1 = 100 + i * 50
point1 = QtCore.QPointF(x0, y0)
point2 = QtCore.QPointF(x1, y1)
line1 = QtCore.QLineF(point1, point2)
painter.drawPoint(point1)
painter.drawLine(line1)
if __name__ == "__main__":
app = QtWidgets.QApplication()
w = Window2()
w.show()
app.exec_()
推荐阅读
- reactjs - 自定义 React-Color 组件在更新颜色时中断
- linux - GitLab CI 遇到错误:找不到命令:ajv
- c - ping 时 strace 输出中 connect() 上的 EINVAL
- swagger - 使用文件格式的 Swagger 上传文件?
- node.js - Nodejs test giving error when part of the test is modularized into a different function
- datatables-1.10 - DataTables add formatting to cell in numeric column makes column sort as a string not a number
- apache-spark - 由于 Spark 流应用程序执行程序具有 jar 文件,工作节点空间不足
- javascript - filtering select drop down menu to filter in React?
- python - How to use primary and foreign key constraints?
- typescript - Compiling typescript web worker works from command line but not from gulp