如何使用 Tkinter 创建两个具有相同高度的框架(顶部和底部)?

问题描述 投票:0回答:1

在 Tkinter Python 中,我想创建两个框架并将一个放在另一个之上,然后在这两个框架中插入一个 matplotlib 图。那,我设法做到了。问题是,在创建时,这两个框架似乎总是具有不同的高度(底部的框架总是小于顶部的框架)。

我的目标是让两个框架具有相同的高度。

这是产生上述不良结果的代码的简化版本:

import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
import numpy as np

# Root
root = tk.Tk()
root.state('zoomed')

# Upper frame 
canv = tk.Frame(root)
canv.pack()

plt.rcParams["axes.prop_cycle"] = plt.cycler(color=["#4C2A85", "#BE96FF", "#957DAD", "#5E366E", "#A98CCC"])
plt.style.use('ggplot')

L = [i for i in range(10)]

fig, ax = plt.subplots()
l = ax.fill_between(L, L)
ax.set_title("Upper plot")

canvas = FigureCanvasTkAgg(fig, canv)
canvas.draw()
canvas.get_tk_widget().pack()

# Lower frame 
canv2 = tk.Frame(root)
canv2.pack()

fig2, ax2 = plt.subplots()
l2 = ax2.fill_between(L, L)
ax2.set_title("Lower plot")
    
canvas2 = FigureCanvasTkAgg(fig2, canv2)
canvas2.draw()
canvas2.get_tk_widget().pack()

root.mainloop

感谢任何愿意提供帮助的人。

python tkinter height frames
1个回答
0
投票

如果您使用

grid()
而不是
pack()
来放置两个
Frame
那么您可以使用
root.rowconfigure(.., weight=1)
来设置它将窗口的高度分割成行

root = tk.Tk()

root.rowconfigure(0, weight=1)
root.rowconfigure(1, weight=1)

canv = tk.Frame(root)
canv.grid(column=0, row=0)

#... code ...

canv2 = tk.Frame(root)
canv2.grid(column=0, row=1)

#... code ...

enter image description here


我在

Linux
上进行了测试,没有
root.state('zoomed')

import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
import numpy as np

# Root
root = tk.Tk()
#root.state('zoomed')
root.rowconfigure(0, weight=1)
root.rowconfigure(1, weight=1)

# Upper frame 
canv = tk.Frame(root)
canv.grid(column=0, row=0)

plt.rcParams["axes.prop_cycle"] = plt.cycler(color=["#4C2A85", "#BE96FF", "#957DAD", "#5E366E", "#A98CCC"])
plt.style.use('ggplot')

L = [i for i in range(10)]

fig, ax = plt.subplots()
l = ax.fill_between(L, L)
ax.set_title("Upper plot")

canvas = FigureCanvasTkAgg(fig, canv)
canvas.draw()
canvas.get_tk_widget().pack()

# Lower frame 
canv2 = tk.Frame(root)
canv2.grid(column=0, row=1)

fig2, ax2 = plt.subplots()
l2 = ax2.fill_between(L, L)
ax2.set_title("Lower plot")
    
canvas2 = FigureCanvasTkAgg(fig2, canv2)
canvas2.draw()
canvas2.get_tk_widget().pack()

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.