pyqt写一个界面,界面包括一个坐标轴,接收其他文件输出的tensor,根据tensor的值画点,tensor值0-3,0对应第一坐标轴,以此类推。
时间: 2024-01-26 20:05:07 浏览: 68
pyqt实例,界面例子
好的,下面是一个简单的PyQt程序,可以实现你的需求:
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor, QPen
from PyQt5.QtCore import Qt
import torch
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(100, 100, 500, 500)
self.setWindowTitle('My Widget')
self.tensor = torch.zeros((4, 4))
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(QPen(Qt.black, 2, Qt.SolidLine))
x_axis_length = self.width() - 100
y_axis_length = self.height() - 100
painter.drawLine(50, 50 + y_axis_length, 50 + x_axis_length, 50 + y_axis_length)
painter.drawLine(50, 50, 50, 50 + y_axis_length)
for i in range(4):
for j in range(4):
value = self.tensor[i][j]
if value == 0:
painter.setBrush(QColor(255, 0, 0))
elif value == 1:
painter.setBrush(QColor(0, 255, 0))
elif value == 2:
painter.setBrush(QColor(0, 0, 255))
elif value == 3:
painter.setBrush(QColor(255, 255, 0))
painter.drawEllipse((j + 1) * (x_axis_length // 5) + 50 - 5, y_axis_length - (i + 1) * (y_axis_length // 5) + 50 - 5, 10, 10)
def update_tensor(self, tensor):
self.tensor = tensor
self.update()
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = MyWidget()
widget.show()
# 模拟其他文件发送的tensor
tensor = torch.randint(0, 4, (4, 4))
widget.update_tensor(tensor)
sys.exit(app.exec_())
```
这个程序实现了以下功能:
1. 创建了一个QWidget窗口,包含一个坐标轴和一个空的tensor。
2. 在paintEvent中绘制了坐标轴和根据tensor的值绘制了点。
3. 实现了一个update_tensor方法,用于接收其他文件输出的tensor,并更新界面上的点。
你可以将这段代码保存为一个.py文件,并运行它,即可看到一个包含坐标轴和点的窗口。当其他文件输出tensor时,可以调用update_tensor方法将其传入,程序会自动更新界面上的点。
阅读全文