我希望当我拉伸窗口时,其中的文本框也会变大。 我一直在关注senddex的youtube视频系列,所以我的代码与他的相似。
我尝试将其设置为粘性,我尝试对列和行施加权重,但它不会改变。
代码:
import tkinter as tk
from tkinter import filedialog
class OpenFile(tk.Tk):
def __init__(self,*args,**kwargs):
tk.Tk.__init__(self,*args,**kwargs)
tk.Tk.wm_title(self,"FileOpener")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0,weight=1)
container.grid_columnconfigure(0, weight=1)
menubar = tk.Menu(container)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Save settings",
command= lambda:print("Doing nothing"))
filemenu.add_separator()
filemenu.add_command(label="Exit", command=quit)
menubar.add_cascade(label="File", menu=filemenu)
tk.Tk.config(self,menu=menubar)
self.frames = {}
for F in (StartPage,):
frame =F(container, self)
self.frames[F] = frame
frame.grid( row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self,cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
global filetextbox
### INPUT FRAME
containerinput=tk.Frame(self)
containerinput.grid(row=2,column=0,columnspan=4,sticky="nsew")
containerinput.grid_columnconfigure(0, weight=1)
containerinput.grid_rowconfigure(1, weight=1)
## Label
labeltxt1 = tk.Text(self)
labeltxt1.config(height=1,relief=tk.SUNKEN)
#label1.pack(pady=10,padx=10,side=tk.LEFT)
labeltxt1.grid(row=1,column=0)
## Text
text1 = tk.Text(containerinput)
text1.pack(side=tk.LEFT,fill="both",expand=True)
scroll1= tk.Scrollbar(containerinput,command=text1.yview)
scroll1.pack(side=tk.RIGHT,fill=tk.BOTH)
text1.config(yscrollcommand=scroll1.set)
#containerinput.pack(side=tk.LEFT,fill="both",expand=True)
##Button
button1 = tk.Button(self, text="Choose file",
command=lambda:getFile(self))
#button1.pack(side=tk.TOP)
button1.grid(row=0,column=0)
app=OpenFile()
app.mainloop()
这是它的样子:
这是我想要的类型:
答案 0 :(得分:0)
您首先需要调试的方法是暂时为框架提供独特的颜色。这样可以很容易地看到几个嵌套框架中的哪些正在增长,哪些没有。有时添加额外的填充也很有帮助,这样您可以看到框架的内部边缘,但是在这种情况下不是必须的。
因此,首先为不同的帧添加颜色:
class OpenFile(tk.Tk):
def __init__(self,*args,**kwargs):
...
container = tk.Frame(self, background="pink")
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent, background="blue")
...
containerinput=tk.Frame(self, background="yellow")
执行此操作后,很明显,蓝色框正在根据需要扩展,但是其中的黄色框没有扩展。
原因是您将黄色框(containerinput
)放在了StartPage
框内,但没有配置它来调整大小。由于您是使用grid
添加的,因此您需要告诉tkinter哪些行和列应该获得任何额外的未使用空间。您可以在放置grid_rowconfigure
的帧上使用grid_columnconfigure
和containerinput
进行此操作。在这种情况下,该帧为self
:
containerinput=tk.Frame(self, background="yellow")
containerinput.grid(row=2,column=0,columnspan=4,sticky="nsew")
...
self.grid_rowconfigure(2, weight=1)
self.grid_columnconfigure(0, weight=1)
注意:您仍然需要在grid_rowconfigure
上调用grid_columnconfigure
和containerinput
,因为您还需要使用grid
将小部件放置在该框架中。
答案 1 :(得分:-1)
您可以绑定'
class StartPage(tk.Frame):
def __init__(self)
self.bind("<Configure>", self.update_size)
...
def update_size(self, event):
print(event.width, event.height) #this has all the information about the window resize