问题描述
我有一个gui,它没有按照我想要的方式显示按钮。除非对gui进行拉伸,否则将裁剪该帧。
我想让带有按钮的框架(frame2)始终显示三个按钮,并保持相同的大小,而不管gui放大到的大小如何。知道我要去哪里哪里吗?
import tkinter as tk
import tkinter
from tkinter import ttk
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import figureCanvasTkAgg,NavigationToolbar2Tk
from matplotlib.figure import figure
#=====================================================================
# ROOT figURE FOR GUI
#=====================================================================
root = tk.Tk()
root.title("Tab Widget")
root.geometry("600x450")
tabControl = ttk.Notebook(root)
tab1 = ttk.Frame(tabControl)
tab2 = ttk.Frame(tabControl)
tabControl.add(tab1,text ='Circle Cal')
tabControl.add(tab2,text ='OPW')
tk.Grid.rowconfigure(root,weight=1)
tk.Grid.columnconfigure(root,weight=1)
tabControl.grid(column=0,row=0,sticky=tk.E+tk.W+tk.N+tk.S)
#MAKE A figURE OBJECT
my_figure1 = figure(figsize = (4,4),dpi = 100)
#MAKE A FRAME WIDGET
frame1 = tk.Frame(tab1,bd=2,relief=tk.GROOVE)
frame1.pack(side=tk.LEFT,anchor=tk.N,fill=tk.BOTH,expand=True)
#create another frame(frame2)
frame2 = tk.Frame(tab1,relief=tk.GROOVE)
frame2.pack(side=tk.RIGHT,anchor=tk.E,fill=tk.BOTH)
#MAKE A CANVAS OBJECT
my_canvas1 = figureCanvasTkAgg(my_figure1,master = frame1) # creating the Tkinter canvas containing the Matplotlib figure
# TURN THE CANVAS OBJECT INTO A CANVAS WIDGET
my_canvas1.get_tk_widget().pack(side = tkinter.TOP,fill = tkinter.BOTH,expand = 1) # placing the canvas on the Tkinter window
my_canvas1.draw()
def plotData():
pass
def clearPlot():
pass
# MAKE BUTTON TO PLOT GRAPH
button1 = tk.Button(frame2,text = "Plot",command = plotData,relief = tk.GROOVE,padx =20,pady =20 )
button1.grid(row = 0,column = 0)
# MAKE BUTTON TO CLEAR PLOT
button2 = tk.Button(frame2,text = "Clear",command = clearPlot,pady =20 )
button2.grid(row = 0,column = 1)
# MAKE BUTTON TO close
button2 = tk.Button(frame2,text = "Close",column = 2)
root.mainloop()
解决方法
答案很简单,就是按钮没有足够的空间。您将窗口的大小强制为特定宽度,而宽度则太小。
当您将窗口强制为特定大小时,pack
将需要缩小一个或多个窗口小部件以使所有窗口小部件均适合。这样做的顺序与向pack
添加窗口小部件的顺序相反。
由于您希望画布成为可放大和缩小的小部件,因此您需要最后包装包含它的框架。因此,请先在pack
上调用frame2
,再在pack
上调用frame1
。
如果将对pack
的调用组合在一起而不是将其与窗口小部件创建交织在一起,这是最简单的。
frame2.pack(side=tk.RIGHT,anchor=tk.E,fill=tk.BOTH)
frame1.pack(side=tk.LEFT,anchor=tk.N,fill=tk.BOTH,expand=True)
,
您是否尝试删除
root = tk.Tk()
root.title("Tab Widget")
#root.geometry("600x450")
几何管理器