我试图让我的列表框移动到图形用户界面的底部,但无论我给予它的行值有多高,它都不会移动。你可以在我的代码中的Creat_Gui方法中看到我的列表框。我不确定为什么会发生这种情况,因为按钮在第1行,所以我不确定是什么原因导致了这种情况。
我试过使用sticky='s',但没有成功我试过多次更改行,但没有成功。我试过使用root.rowconfigure(100,weight=1),这可以正常工作,但会扰乱网格,这很烦人
import tkinter as tk
class Manager:
def __init__(self):
self.root=tk.Tk()
self.root.title('password_manager')
self.root.geometry('500x600')
self.create_GUI()
self.storage = {}
self.root.mainloop()
def create(self):
pass
def open_page(self):
print('openpage')
def add_new_button(self):
pass
def add_new(self):
self.app_title=tk.Label(text='test')
self.app_title.grid(row=2,column=50)
self.application_name=tk.Entry(self.root,width=20,font=('arial',18))
self.username=tk.Entry(self.root,width=20,font=('arial',18))
self.password=tk.Entry(self.root,width=20,font=('arial',18))
self.application_name.grid(row=2, column=1)
self.username.grid(row=3, column=2)
self.password.grid(row=4, column=3)
self.app_name_label = tk.Label(self.root, text='Application Name:')
self.username_label = tk.Label(self.root, text='Username:')
self.password_label = tk.Label(self.root, text='Password:')
self.app_name_label.grid(row=2, column=0)
self.username_label.grid(row=3, column=1)
self.password_label.grid(row=4, column=2)
self.password.bind('<Return>',self.hide)
def hide(self,thing):
#store user info to pass onto dictionary and hide textboxes
username=self.username.get()
password=self.password.get()
app_name=self.application_name.get()
self.application_name.grid_forget()
self.username.grid_forget()
self.password.grid_forget()
self.add_to_memory(username,password,app_name)
def add_to_memory(self,username,password,app_name):
#store username password and application name in dictionary
if app_name in self.storage.keys():
return
else:
self.storage[app_name]=(username,password)
print(self.storage)
def create_GUI(self):
#create initial interface
#self.root.columnconfigure(100, weight=1)
#self.root.rowconfigure(100, weight=1)
self.listbox=tk.Listbox(self.root,width=100)
self.listbox.grid(row=200,column=0)
self.button=tk.Button(self.root,text='add new',font=('arial',18),command=self.add_new)
self.button.grid(row=1,column=0)
Manager()
1条答案
按热度按时间vddsk6oq1#
如果你想使用网格,并且你想让一个小部件位于其父小部件的底部,你需要在小部件上方指定一些行来占据所有额外的空间,迫使小部件位于底部。
这样,列表框将位于底部,上方有额外的空间。如果你想添加更多的小部件,你可以将它们添加到
self.expando_frame
而不是self.root
,它们将出现在列表框的上方。以这种方式使用框架是一种很有价值的技术。例如,你可以在root中使用三个框架:一个用于顶行按钮,一个用于底部的列表框,一个用于中间的所有内容,然后您可以在这些框架上使用
pack
并保存一行代码(因为不必配置行),然后您可以在中间框架内的小部件上使用grid
。