• python Matplotlib Tkinter--pack 框架案例


    环境
    python:python-3.12.0-amd64
    包:
    matplotlib 3.8.2
    pillow  10.1.0

    版本一

    1. import matplotlib.pyplot as plt
    2. from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
    3. import tkinter as tk
    4. import tkinter.messagebox as messagebox
    5. import tkinter.ttk as ttk
    6. # 创建自定义工具栏类
    7. class MyNavigationToolbar(NavigationToolbar2Tk):
    8. toolitems = [('Home','回到初始状态','home','home'),
    9. ('Back', '后退', 'back', 'back'),
    10. ('Home', '前进', 'forward', 'forward'),
    11. ('Pan', '平移', 'move', 'pan'),
    12. ('Zoom', '缩放', 'zoom_to_rect', 'zoom'),
    13. ('Save', '保存', 'filesave', 'save_figure')]
    14. def __init__(self, *args, **kwargs):
    15. super().__init__(*args, **kwargs)
    16. def __init__(self, canvas_, window_):
    17. NavigationToolbar2Tk.__init__(self, canvas_, window_)
    18. self.custom_button_img1 = tk.PhotoImage(file='figure_pic1.png') # 创建第一个图片按钮
    19. self.custom_button = ttk.Button(self, image=self.custom_button_img1, command=lambda: self.toggle_figure2())
    20. self.custom_button.pack(side=tk.LEFT) # 添加按钮到工具栏上
    21. self.custom_button_img2 = tk.PhotoImage(file='figure_pic2.png') # 创建第二个图片按钮
    22. self.custom_button2 = ttk.Button(self, image=self.custom_button_img2, command=lambda: print('111.'))
    23. self.custom_button2.pack(side=tk.LEFT) # 添加按钮到工具栏上
    24. self.fig2_visible = False # 记录figure2的可见性
    25. def toggle_figure2(self):
    26. if self.fig2_visible:
    27. canvas2.get_tk_widget().pack_forget() # 隐藏figure2
    28. self.fig2_visible = False
    29. else:
    30. canvas2.get_tk_widget().pack() # 显示figure2
    31. self.fig2_visible = True
    32. # 创建 Tkinter 窗口
    33. window = tk.Tk()
    34. window.title("Matplotlib in Tkinter")
    35. # 禁用窗口最大化功能
    36. window.resizable(False, False)
    37. # 设置窗口大小和位置
    38. #window.geometry('800x600')
    39. top_frame = tk.Frame(window)
    40. top_frame.pack(fill=tk.BOTH, expand=True)
    41. bottom_frame = tk.Frame(window)
    42. bottom_frame.pack(fill=tk.BOTH, expand=True)
    43. fig1 = plt.figure()
    44. plt.plot([1, 2, 3], [4, 5, 6])
    45. fig2 = plt.figure()
    46. plt.plot([3, 2, 1], [6, 5, 4])
    47. canvas1 = FigureCanvasTkAgg(fig1)
    48. canvas1.draw()
    49. canvas2 = FigureCanvasTkAgg(fig2)
    50. canvas2.draw()
    51. window.iconbitmap('./icon.ico')
    52. toolbar_frame = ttk.Frame(top_frame) # 创建放置自定义工具栏的frame
    53. toolbar1 = MyNavigationToolbar(canvas1, window)
    54. toolbar1.update()
    55. toolbar1.pack(side=tk.TOP, fill=tk.X, expand=True) # 将自定义工具栏放置在toolbar_frame中,并确保其占据可用空间
    56. toolbar_frame.pack(side=tk.TOP, fill=tk.X) # 将toolbar_frame放置在top_frame中,确保其占据可用空间
    57. canvas1.get_tk_widget().pack(fill=tk.BOTH, expand=True) # 将figure1的canvas放在top_frame中
    58. canvas2.get_tk_widget().pack(fill=tk.BOTH, expand=True) # 将figure2的canvas放在bottom_frame中
    59. canvas2.get_tk_widget().pack_forget() # 隐藏figure2
    60. window.mainloop()

    版本二

    1. import matplotlib.pyplot as plt
    2. from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
    3. import tkinter as tk
    4. import tkinter.messagebox as messagebox
    5. import tkinter.ttk as ttk
    6. # 创建自定义工具栏类
    7. class MyNavigationToolbar(NavigationToolbar2Tk):
    8. toolitems = [('Home','回到初始状态','home','home'),
    9. ('Back', '后退', 'back', 'back'),
    10. ('Home', '前进', 'forward', 'forward'),
    11. ('Pan', '平移', 'move', 'pan'),
    12. ('Zoom', '缩放', 'zoom_to_rect', 'zoom'),
    13. ('Save', '保存', 'filesave', 'save_figure')]
    14. def __init__(self, canvas_, window_):
    15. super().__init__(canvas_, window_)
    16. self.custom_button_img1 = tk.PhotoImage(file=r'E:\pythonProject\合并/figure_pic1.png') # 创建第一个图片按钮
    17. self.custom_button = ttk.Button(self, image=self.custom_button_img1, command=lambda: self.toggle_figure2())
    18. self.custom_button.pack(side=tk.LEFT) # 添加按钮到工具栏上
    19. self.custom_button_img2 = tk.PhotoImage(file=r'E:\pythonProject\合并/figure_pic2.png')
    20. self.custom_button2 = ttk.Button(self, image=self.custom_button_img2, command=lambda: print('111.'))
    21. self.custom_button2.pack(side=tk.LEFT) # 添加按钮到工具栏上
    22. self.fig2_visible = False # 记录figure2的可见性
    23. def toggle_figure2(self):
    24. if self.fig2_visible:
    25. canvas2.get_tk_widget().pack_forget() # 隐藏figure2
    26. self.fig2_visible = False
    27. else:
    28. canvas2.get_tk_widget().pack() # 显示figure2
    29. self.fig2_visible = True
    30. # 创建 Tkinter 窗口
    31. window = tk.Tk()
    32. window.title("Matplotlib in Tkinter")
    33. # 禁用窗口最大化功能
    34. window.resizable(False, False)
    35. # 设置窗口大小和位置
    36. #window.geometry('800x600')
    37. top_frame = tk.Frame(window)
    38. top_frame.pack(fill=tk.BOTH, expand=True)
    39. bottom_frame = tk.Frame(window)
    40. bottom_frame.pack(fill=tk.BOTH, expand=True)
    41. fig1 = plt.figure()
    42. plt.plot([1, 2, 3], [4, 5, 6])
    43. fig2 = plt.figure()
    44. plt.plot([3, 2, 1], [6, 5, 4])
    45. canvas1 = FigureCanvasTkAgg(fig1)
    46. canvas1.draw()
    47. canvas2 = FigureCanvasTkAgg(fig2)
    48. canvas2.draw()
    49. window.iconbitmap(r'E:\pythonProject\合并/icon.ico')
    50. toolbar_frame = ttk.Frame(top_frame) # 创建放置自定义工具栏的frame
    51. toolbar1 = MyNavigationToolbar(canvas1, window)
    52. toolbar1.update()
    53. toolbar1.pack(side=tk.TOP, fill=tk.X, expand=True) # 将自定义工具栏放置在toolbar_frame中,并确保其占据可用空间
    54. toolbar_frame.pack(side=tk.TOP, fill=tk.X) # 将toolbar_frame放置在top_frame中,确保其占据可用空间
    55. canvas1.get_tk_widget().pack(fill=tk.BOTH, expand=True) # 将figure1的canvas放在top_frame中
    56. canvas2.get_tk_widget().pack(fill=tk.BOTH, expand=True) # 将figure2的canvas放在bottom_frame中
    57. canvas2.get_tk_widget().pack_forget() # 隐藏figure2
    58. window.mainloop()

     

    图片资源下载(分享-->python Matplotlib  Tkinter图片):

    链接:https://pan.baidu.com/s/1vFOU52gG0bgK8RYuj-dzOg 
    提取码:2oy0 

  • 相关阅读:
    物联网行业知识概览(一)
    工作中,Oracle常用函数
    【网页前端】CSS常用布局之定位
    批量发送邮件时怎么使用蜂邮EDM与Outlook?
    wilcoxon秩和检验--学习笔记
    CANdb++数据库操作
    Qt 日志重定向
    前端练习小项目 —— 养一只电子蜘蛛
    Linux jenkins忘记密码处理
    Helm3模板-模板函数与管道
  • 原文地址:https://blog.csdn.net/caoyanchao1/article/details/136292556