用pyqt实现一个界面,目前有一维tensor,其值0-3,计算每个值的个数,绘画柱状图。
时间: 2024-02-24 14:53:27 浏览: 74
好的,这个问题可以分成两个部分来解决:计算每个值的个数和绘制柱状图。
首先,我们需要导入需要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy
from PyQt5.QtCore import Qt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
```
然后,我们定义一个类,继承自QMainWindow,用于创建界面:
```python
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 设置窗口标题和大小
self.setWindowTitle('Bar Chart')
self.setGeometry(100, 100, 800, 600)
# 创建一个画布,并添加到窗口中
self.canvas = FigureCanvas(plt.Figure(figsize=(6, 4)))
self.setCentralWidget(self.canvas)
# 创建一个工具栏
toolbar = self.addToolBar('Tools')
toolbar.setMovable(False)
# 创建一个按钮,用于计算和绘制柱状图
button = toolbar.addAction('Calculate and Draw')
button.setShortcut('Ctrl+D')
button.triggered.connect(self.calculate_and_draw)
# 创建一个状态栏
self.statusBar()
# 显示窗口
self.show()
```
接着,我们需要实现calculate_and_draw方法,用于计算每个值的个数和绘制柱状图:
```python
def calculate_and_draw(self):
# 生成一维随机数
data = np.random.randint(0, 4, size=100)
# 计算每个值的个数
counts = [0, 0, 0, 0]
for d in data:
counts[d] += 1
# 清空画布
self.canvas.figure.clear()
# 绘制柱状图
ax = self.canvas.figure.add_subplot(111)
ax.bar([0, 1, 2, 3], counts)
ax.set_xlabel('Values')
ax.set_ylabel('Counts')
ax.set_title('Bar Chart')
# 更新画布
self.canvas.draw()
# 在状态栏中显示计算完成
self.statusBar().showMessage('Calculation and drawing completed.', 3000)
```
最后,我们需要创建一个应用程序并运行:
```python
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
app.exec_()
```
完整代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy
from PyQt5.QtCore import Qt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 设置窗口标题和大小
self.setWindowTitle('Bar Chart')
self.setGeometry(100, 100, 800, 600)
# 创建一个画布,并添加到窗口中
self.canvas = FigureCanvas(plt.Figure(figsize=(6, 4)))
self.setCentralWidget(self.canvas)
# 创建一个工具栏
toolbar = self.addToolBar('Tools')
toolbar.setMovable(False)
# 创建一个按钮,用于计算和绘制柱状图
button = toolbar.addAction('Calculate and Draw')
button.setShortcut('Ctrl+D')
button.triggered.connect(self.calculate_and_draw)
# 创建一个状态栏
self.statusBar()
# 显示窗口
self.show()
def calculate_and_draw(self):
# 生成一维随机数
data = np.random.randint(0, 4, size=100)
# 计算每个值的个数
counts = [0, 0, 0, 0]
for d in data:
counts[d] += 1
# 清空画布
self.canvas.figure.clear()
# 绘制柱状图
ax = self.canvas.figure.add_subplot(111)
ax.bar([0, 1, 2, 3], counts)
ax.set_xlabel('Values')
ax.set_ylabel('Counts')
ax.set_title('Bar Chart')
# 更新画布
self.canvas.draw()
# 在状态栏中显示计算完成
self.statusBar().showMessage('Calculation and drawing completed.', 3000)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
app.exec_()
```
阅读全文