使用 tkinter 在框架中设置内部模块
setting inner modules in frame using tkinter
这是我的代码,我真正想做的是在框架中间设置 URL 标签并在其旁边设置输入文本,并在 URL 下方添加 3 个按钮,输入文本字段。
import tkinter as tk
from tkinter import *
root = tk.Tk()
root.geometry("520x400")
frame1 = tk.LabelFrame(root, text="my_first_window", width=400, height=200, bd=5)
Label(root, text="URL:").grid(row=0, column=1 ,sticky=W)
e1 = Entry(root)
e1.grid(row=0, column=2)
frame1.grid(row=0, column=0, columnspan=7, padx=8)
Button(root, text='BACK', command=lambda:print('BACK')).grid(row=8, column=1, sticky=W, pady=4)
Button(root, text='NEXT', command=lambda:print('NEXT')).grid(row=8, column=2, sticky=W, pady=4)
Button(root, text='CANCLE', command=lambda:print('CANCLE')).grid(row=8, column=3, sticky=W, pady=4)
mainloop()
如果您坚持使用 .grid()
方法,那么您可以将以下内容添加到您的代码中:
for column in range(10):
Grid.columnconfigure(root, column, weight=1)
for row in range(10):
Grid.rowconfigure(root, row, weight=1)
这意味着网格的列和行将在 window 中均匀分配 space。将它与 .grid()
的 sticky
属性结合使用将使您获得所需的结果。
然而,从主观上讲,切换到 .pack()
方法可能更容易,这种方法(至少在我看来)允许更容易地配置和管理 tkinter GUI。
您可以执行如下操作:
from tkinter import *
root = Tk()
root.geometry("520x400")
frame1 = LabelFrame(root, text="my_first_window", width=400, height=200, bd=5)
Label(frame1, text="URL:").pack(side="left", fill="x")
e1 = Entry(frame1)
e1.pack(side="left", fill="x", expand=True)
frame1.pack(fill="both", expand=True)
Button(root, text='BACK', command=lambda:print('BACK')).pack(fill="both", expand=True, side="left", padx=5, pady=5)
Button(root, text='NEXT', command=lambda:print('NEXT')).pack(fill="both", expand=True, side="left", padx=5, pady=5)
Button(root, text='CANCLE', command=lambda:print('CANCLE')).pack(fill="both", expand=True, side="left", padx=5, pady=5)
root.mainloop()
以上使用了很多不同的新想法,这些想法在 Stack Overflow 上被问过和回答过多次,所以我要 link 你到 this fantastic answer from Bryan Oakley。
这是我的代码,我真正想做的是在框架中间设置 URL 标签并在其旁边设置输入文本,并在 URL 下方添加 3 个按钮,输入文本字段。
import tkinter as tk
from tkinter import *
root = tk.Tk()
root.geometry("520x400")
frame1 = tk.LabelFrame(root, text="my_first_window", width=400, height=200, bd=5)
Label(root, text="URL:").grid(row=0, column=1 ,sticky=W)
e1 = Entry(root)
e1.grid(row=0, column=2)
frame1.grid(row=0, column=0, columnspan=7, padx=8)
Button(root, text='BACK', command=lambda:print('BACK')).grid(row=8, column=1, sticky=W, pady=4)
Button(root, text='NEXT', command=lambda:print('NEXT')).grid(row=8, column=2, sticky=W, pady=4)
Button(root, text='CANCLE', command=lambda:print('CANCLE')).grid(row=8, column=3, sticky=W, pady=4)
mainloop()
如果您坚持使用 .grid()
方法,那么您可以将以下内容添加到您的代码中:
for column in range(10):
Grid.columnconfigure(root, column, weight=1)
for row in range(10):
Grid.rowconfigure(root, row, weight=1)
这意味着网格的列和行将在 window 中均匀分配 space。将它与 .grid()
的 sticky
属性结合使用将使您获得所需的结果。
然而,从主观上讲,切换到 .pack()
方法可能更容易,这种方法(至少在我看来)允许更容易地配置和管理 tkinter GUI。
您可以执行如下操作:
from tkinter import *
root = Tk()
root.geometry("520x400")
frame1 = LabelFrame(root, text="my_first_window", width=400, height=200, bd=5)
Label(frame1, text="URL:").pack(side="left", fill="x")
e1 = Entry(frame1)
e1.pack(side="left", fill="x", expand=True)
frame1.pack(fill="both", expand=True)
Button(root, text='BACK', command=lambda:print('BACK')).pack(fill="both", expand=True, side="left", padx=5, pady=5)
Button(root, text='NEXT', command=lambda:print('NEXT')).pack(fill="both", expand=True, side="left", padx=5, pady=5)
Button(root, text='CANCLE', command=lambda:print('CANCLE')).pack(fill="both", expand=True, side="left", padx=5, pady=5)
root.mainloop()
以上使用了很多不同的新想法,这些想法在 Stack Overflow 上被问过和回答过多次,所以我要 link 你到 this fantastic answer from Bryan Oakley。