Python 在PySide2中绘制线和点,并进行协调
我想通过PySide2画一些线和点,我遵循文档并在下面提供代码,但在调用函数后它没有显示任何内容Python 在PySide2中绘制线和点,并进行协调,python,pyside2,qpainter,Python,Pyside2,Qpainter,我想通过PySide2画一些线和点,我遵循文档并在下面提供代码,但在调用函数后它没有显示任何内容 class Window2(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Deformed Structure") self.DrawWindows = QtGui.QWindow() self.DrawButt
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++是区分大小写的,所以PytTeNeX不同于PrtueToviv.
- 不应直接调用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_()
非常感谢你。我现在更新了我的问题。您的代码在单独的文件中工作。然而,它只是画了一条线,似乎“for”循环一步一步地工作,我看到的是最后一个循环图。我对此不确定@莫霍塔:不,这个循环是可行的,但是你的线是共线的,而且它们相交,所以从视觉上看,你好像画了一条线。其次,当我更新我的问题时,你可以看到我有一个主窗口和窗口2。不过,当我将您的代码导入到我的代码中时,第二个窗口会正确地打开“draw_按钮”,但当我按下按钮时,它根本就没有绘图。@MohoTa您读过我的答案了吗?似乎不是。我建议您重新阅读并分析它。对不起,您是对的,我不知道“paintEvent”实际上是一个内置函数。谢谢您的帮助