You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5 GUI中点击按钮绘制squarify树图的实现方法

解决PyQt5中点击按钮绘制Squarify树图的问题

嘿,作为Python和PyQt5的初学者,能尝试把可视化功能集成到GUI里已经超棒啦!我来帮你把squarify树图的逻辑整合到按钮点击事件中,下面是完整的实现方案:

首先,确保你已经安装了所有需要的依赖包,如果还没装,先运行这些命令:

pip install pyqt5 pandas squarify matplotlib

接下来是完整的PyQt5示例代码,我会把squarify树图的绘制逻辑嵌入到Qt窗口中(而不是单独弹出matplotlib窗口):

import sys
import pandas as pd
import squarify
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, 
                             QVBoxLayout, QWidget)
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Squarify树图演示")
        self.setGeometry(100, 100, 800, 600)

        # 创建主部件和布局
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout = QVBoxLayout(central_widget)

        # 创建触发绘图的按钮
        self.plot_btn = QPushButton("绘制Squarify树图")
        self.plot_btn.clicked.connect(self.plot_squarify)
        layout.addWidget(self.plot_btn)

        # 创建matplotlib画布,用于在Qt窗口中显示图表
        self.figure = Figure(figsize=(8, 6))
        self.canvas = FigureCanvas(self.figure)
        layout.addWidget(self.canvas)

    def plot_squarify(self):
        # 清空之前的图表内容,避免叠加
        self.figure.clear()
        ax = self.figure.add_subplot(111)

        # 你的squarify树图核心逻辑
        df = pd.DataFrame({'nb_people':[8,3,4,2], 'group':["group A", "group B", "group C", "group D"] })
        squarify.plot(sizes=df['nb_people'], label=df['group'], alpha=.8, ax=ax)
        
        # 隐藏坐标轴,和你的示例效果一致
        ax.axis('off')

        # 更新画布显示
        self.canvas.draw()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

关键细节说明:

  • 我们用FigureCanvasQTAgg把matplotlib图表嵌入到PyQt窗口内部,这样图表会和GUI控件融为一体,而不是单独弹出窗口。
  • 每次点击按钮都会先清空旧图表,再重新绘制新的树图,避免多个图表叠加显示。
  • 通过指定squarify.plot的ax参数,让绘图操作在Qt的画布上进行,而不是默认的matplotlib窗口。
  • 最后调用self.canvas.draw()刷新画布,确保新绘制的图表能实时显示。

你可以直接运行这段代码,点击按钮就能看到你想要的squarify树图啦!如果还有其他细节问题,随时调整就行~

内容的提问来源于stack exchange,提问作者Shreyash Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:47:01