为什么Tkinter框架不显示所有三个按钮,除非将gui拖动到更大/更大的尺寸中

问题描述

我有一个gui,它没有按照我想要的方式显示按钮。除非对gui进行拉伸,否则将裁剪该帧。

enter image description here

像这样,最后我在其中看到所需的三个按钮:

enter image description here

我想让带有按钮的框架(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") 

几何管理器