在 tkinter 中更改框架的大小,由 class 定义
Change size of frame in tkinter, which is defined by a class
我正在尝试更改 tkinter 中的框架大小;我正在使用 python 3.0,并且正在为学校项目创建库存管理类型的东西。这是我现在拥有的代码,我正在尝试编辑框架的尺寸。我试图在网上查找,但无处可找到我需要的信息。我知道您需要使用:
.geomtry()
内置函数,但我不知道把它放在哪里,或者如何使用它 class。
import tkinter as tk
LARGE_FONT= ("Comic Sans MS", 12)
SMALL_FONT=('Comic sans ms', 8)
class StockManager(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, PageOne):
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)
lbl1 = tk.Label(self, text='Welcome to the stock manager', font=LARGE_FONT)
lbl1.pack(pady=10, padx=10)
lbl2 = tk.Label(self, text='What would you like to do?', font=LARGE_FONT)
lbl2.pack(pady=10, padx=10)
btnShowProducts = tk.Button(self, text='1. Show all products ', font=LARGE_FONT,)
btnShowProducts.pack(anchor='w')
btnSearchProducts = tk.Button(self, text='2. Search for a product ', font=LARGE_FONT)
btnSearchProducts.pack(anchor='w')
btnAddProduct = tk.Button(self, text='3. Add another product ', font=LARGE_FONT)
btnAddProduct.pack(anchor='w')
btnDeleteProduct = tk.Button(self, text='4. Delete a product ', font=LARGE_FONT)
btnClose = tk.Button(self, text='Close Database ', font=LARGE_FONT)
btnClose.pack(anchor='w')
btnNextPage = tk.Button(self, text='Next Page', font=SMALL_FONT)
btnNextPage.pack(anchor='s')
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Page One!!!", font=LARGE_FONT)
label.pack(pady=10, padx=10)
btnAddTrans = tk.Button(self, text='1. Add a new transaction', font=('comic sans ms', 10)) ##CREATE ADD TRANSACTION HERE
btnShowTrans = tk.Button(self, text='2. Show Transactions', font=('Comic Sans MS', 10))
btnShowTrans.pack(anchor='w')
button1 = tk.Button(self, text="Back to Home")
button1.pack()
button2 = tk.Button(self, text="Next Page")
button2.pack()
menu = StockManager()
menu.mainloop()
这是一个简单的示例,说明如何使用 geometry()
方法调整 window 的大小。这应该可以帮助您了解它在 class.
中的工作原理。
import tkinter as tk
class My_App(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
# we need to set parent as a class attribute for later use
self.parent = parent
button1 = tk.Button(self.parent, text="Make window larger!", command = self.make_window_bigger)
button1.pack()
button2 = tk.Button(self.parent, text="Make window Smaller!", command = self.make_window_smaller)
button2.pack()
def make_window_bigger(self):
x = self.parent.winfo_height() + 10
y = self.parent.winfo_width() + 10
self.parent.geometry('{}x{}'.format(y, x))
def make_window_smaller(self):
x = self.parent.winfo_height() - 10
y = self.parent.winfo_width() - 10
self.parent.geometry('{}x{}'.format(y, x))
root = tk.Tk()
My_App(root)
root.mainloop()
如果要调整 Toplevel
或 Tk
实例的大小,可以对对象使用几何方法:
root.geometry("{}x{}+{}+{}".format(16, 32, 64, 128))
#self.geometry("{}x{}+{}+{}".format(16, 32, 64, 128))
#self.winfo_toplevel().geometry()("{}x{}+{}+{}".format(16, 32, 64, 128))
如果您指的是如何调整 Frame
的大小,您只需设置其 width
和 height
选项即可:
frame = tk.Frame(root, bg='red', width=32, height=23)
#self.config(bg='red', width=32, height=23)
如果框架是 non-empty,您还应该取消设置它的传播,以禁止根据其子部件的大小要求调整大小,根据子部件使用的几何管理器执行此操作:
frame.pack_propagate(False) # discard either in accordance with the children
frame.grid_propagate(False)
#self.pack_propagate(False) # discard either in accordance with the children
#self.grid_propagate(False)
我正在尝试更改 tkinter 中的框架大小;我正在使用 python 3.0,并且正在为学校项目创建库存管理类型的东西。这是我现在拥有的代码,我正在尝试编辑框架的尺寸。我试图在网上查找,但无处可找到我需要的信息。我知道您需要使用:
.geomtry()
内置函数,但我不知道把它放在哪里,或者如何使用它 class。
import tkinter as tk
LARGE_FONT= ("Comic Sans MS", 12)
SMALL_FONT=('Comic sans ms', 8)
class StockManager(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, PageOne):
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)
lbl1 = tk.Label(self, text='Welcome to the stock manager', font=LARGE_FONT)
lbl1.pack(pady=10, padx=10)
lbl2 = tk.Label(self, text='What would you like to do?', font=LARGE_FONT)
lbl2.pack(pady=10, padx=10)
btnShowProducts = tk.Button(self, text='1. Show all products ', font=LARGE_FONT,)
btnShowProducts.pack(anchor='w')
btnSearchProducts = tk.Button(self, text='2. Search for a product ', font=LARGE_FONT)
btnSearchProducts.pack(anchor='w')
btnAddProduct = tk.Button(self, text='3. Add another product ', font=LARGE_FONT)
btnAddProduct.pack(anchor='w')
btnDeleteProduct = tk.Button(self, text='4. Delete a product ', font=LARGE_FONT)
btnClose = tk.Button(self, text='Close Database ', font=LARGE_FONT)
btnClose.pack(anchor='w')
btnNextPage = tk.Button(self, text='Next Page', font=SMALL_FONT)
btnNextPage.pack(anchor='s')
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Page One!!!", font=LARGE_FONT)
label.pack(pady=10, padx=10)
btnAddTrans = tk.Button(self, text='1. Add a new transaction', font=('comic sans ms', 10)) ##CREATE ADD TRANSACTION HERE
btnShowTrans = tk.Button(self, text='2. Show Transactions', font=('Comic Sans MS', 10))
btnShowTrans.pack(anchor='w')
button1 = tk.Button(self, text="Back to Home")
button1.pack()
button2 = tk.Button(self, text="Next Page")
button2.pack()
menu = StockManager()
menu.mainloop()
这是一个简单的示例,说明如何使用 geometry()
方法调整 window 的大小。这应该可以帮助您了解它在 class.
import tkinter as tk
class My_App(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
# we need to set parent as a class attribute for later use
self.parent = parent
button1 = tk.Button(self.parent, text="Make window larger!", command = self.make_window_bigger)
button1.pack()
button2 = tk.Button(self.parent, text="Make window Smaller!", command = self.make_window_smaller)
button2.pack()
def make_window_bigger(self):
x = self.parent.winfo_height() + 10
y = self.parent.winfo_width() + 10
self.parent.geometry('{}x{}'.format(y, x))
def make_window_smaller(self):
x = self.parent.winfo_height() - 10
y = self.parent.winfo_width() - 10
self.parent.geometry('{}x{}'.format(y, x))
root = tk.Tk()
My_App(root)
root.mainloop()
如果要调整 Toplevel
或 Tk
实例的大小,可以对对象使用几何方法:
root.geometry("{}x{}+{}+{}".format(16, 32, 64, 128))
#self.geometry("{}x{}+{}+{}".format(16, 32, 64, 128))
#self.winfo_toplevel().geometry()("{}x{}+{}+{}".format(16, 32, 64, 128))
如果您指的是如何调整 Frame
的大小,您只需设置其 width
和 height
选项即可:
frame = tk.Frame(root, bg='red', width=32, height=23)
#self.config(bg='red', width=32, height=23)
如果框架是 non-empty,您还应该取消设置它的传播,以禁止根据其子部件的大小要求调整大小,根据子部件使用的几何管理器执行此操作:
frame.pack_propagate(False) # discard either in accordance with the children
frame.grid_propagate(False)
#self.pack_propagate(False) # discard either in accordance with the children
#self.grid_propagate(False)