python - get_tk_widget() 框架周围的边框
问题描述
我在 tkinter 中嵌入了两个 matplotlib 绘图的画布小部件。我想使用fig1_canvas.get_tk_widget().configure(highlightthickness=3)
和
在这些框架周围画一个边框fig2_canvas.get_tk_widget().configure(highlightthickness=3)
但是,这只适用于两者之一。
我该如何解决?
import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
root = tk.Tk()
fig1, ax1 = plt.subplots(figsize=(2, 2))
fig2, ax2 = plt.subplots(figsize=(2, 2))
t = np.arange(0, 2*np.pi, 0.1)
ax1.plot(t, np.cos(t))
fig1.tight_layout()
fig1_canvas = FigureCanvasTkAgg(fig1, master=root)
fig1_canvas.get_tk_widget().configure(highlightthickness=3)
ax2.plot(t, np.sin(t))
fig2.tight_layout()
fig2_canvas = FigureCanvasTkAgg(fig2, master=root)
fig2_canvas.get_tk_widget().configure(highlightthickness=3)
frame1 = tk.Frame()
frame2 = tk.Frame()
tk.Label(frame1, text='hello').pack()
tk.Label(frame2, text='world').pack()
frame1.grid(row=0, column=0, rowspan=2)
fig1_canvas.get_tk_widget().grid(row=0, column=1)
fig2_canvas.get_tk_widget().grid(row=1, column=1)
frame2.grid(row=2, column=0, columnspan=2)
tk.mainloop()
解决方案
如果你想在你的图形周围放置一个不同颜色的平面边框,你可以将它们嵌入到所需颜色的框架中,并使用padx
andpady
选项留出边距:
import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
root = tk.Tk()
# frames to create the black border:
fig_frame1 = tk.Frame(root, background='black', padx=2, pady=2)
fig_frame2 = tk.Frame(root, background='black', padx=2, pady=2)
fig1, ax1 = plt.subplots(figsize=(2, 2))
fig2, ax2 = plt.subplots(figsize=(2, 2))
t = np.arange(0, 2*np.pi, 0.1)
ax1.plot(t, np.cos(t))
fig1.tight_layout()
fig1_canvas = FigureCanvasTkAgg(fig1, master=fig_frame1) # set master of fig1_canvas to the border frame
fig1_canvas.get_tk_widget().pack(padx=1, pady=1) # change padx and pady to choose the thickness of the border
ax2.plot(t, np.sin(t))
fig2.tight_layout()
fig2_canvas = FigureCanvasTkAgg(fig2, master=fig_frame2)
fig2_canvas.get_tk_widget().pack(padx=1, pady=1)
frame1 = tk.Frame()
frame2 = tk.Frame()
tk.Label(frame1, text='hello').pack()
tk.Label(frame2, text='world').pack()
frame1.grid(row=0, column=0, rowspan=2)
# put the border frames in the root window
fig_frame1.grid(row=0, column=1)
fig_frame2.grid(row=1, column=1)
frame2.grid(row=2, column=0, columnspan=2)
推荐阅读
- angular - 从角度的主要组件运行测试
- typescript - monorepo 中的打字稿路径别名
- java - SQL 状态 [null]; 错误代码[0];该语句没有返回结果集。嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException
- java - 如何做到这一点 in.readLine() 总是从第一行开始
- mysql - Dropwizard @UnitOfWork: 大量 SET autocommit=1/0; 在没有要运行的事务的情况下提交调用
- c++ - 在 cmake 上使用 clang 进行交叉编译,链接器不支持 armelf_linux_eabi
- xtk - XTK 第 13 课(ami 示例) - 去除从 2D 体积渲染获得的切片中的边界线
- azure-devops - 查看构建管道的精确修订
- laravel - 如何在 Laravel 5.4 中在没有会话过期问题的情况下刷新每个请求的 csrf 令牌
- javascript - 按下链接时如何连接 DOM 对象