为什么Tkinter框架不显示所有三个按钮,除非gui被拖入更宽/更大的尺寸

2024-10-02 00:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个gui,它没有以我想要的方式显示按钮。除非gui被拉伸,否则框架将被裁剪。enter image description here

这样,我终于看到了所需的三个按钮: enter image description here

我想让带有按钮的框架(框架2)始终显示三个按钮,并保持相同的大小,而不考虑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, 0, weight=1)
tk.Grid.columnconfigure(root, 0, 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, bd=2, 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, relief = tk.GROOVE, padx =20, pady =20 )
button2.grid(row = 0, column = 1)
# MAKE BUTTON TO close
button2 = tk.Button(frame2, text = "Close", command = clearPlot, relief = tk.GROOVE, padx =20, pady =20 )
button2.grid(row = 0, column = 2)

root.mainloop()

Tags: textimportmakematplotlibtkintermyroot按钮
2条回答

答案很简单,没有足够的空间放按钮。您强制窗口的大小为特定的宽度,而宽度太小

当您强制窗口为特定大小时,pack将需要收缩一个或多个小部件,以使所有小部件都适合。它按照与添加pack的小部件相反的顺序执行此操作

因为您希望画布是一个可以伸缩的小部件,所以需要打包最后包含它的框架。因此,在调用frame1上的pack之前,先调用frame2上的pack

如果您将对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") 

几何图形管理器

相关问题 更多 >

    热门问题