class 中的 Tkinter 移动按钮有多个 windows
Tkinter moving buttons in a class for having multiple windows
我是 tkinter 的新手,我想尝试在 tkinter 中使用多个 windows。我从这里借用了代码:https://pythonprogramming.altervista.org/create-more-windows-with-tkinter/?doing_wp_cron=1645372524.8916330337524414062500
我希望能够将按钮从 window 的中间和顶部居中移动,但我不确定如何移动 window 中的按钮。我知道如何使用 pack() 通常将按钮移到 class 之外,但我不确定如何在 class 和此代码中执行此操作。当我尝试添加边或填充等属性时,window 会出现,但按钮不会出现。我到处寻找解决方案,但没有找到适合我的问题的解决方案
代码:
import tkinter as tk
class Win1:
def __init__(self, master):
self.master = master
self.master.geometry("800x800")
self.frame = tk.Frame(self.master)
self.butnew("Click to open Window 2", "2", Win2)
self.butnew("Click to open Window 3", "3", Win3)
self.frame.pack()
def butnew(self, text, number, _class):
tk.Button(self.frame, text = text, command= lambda: self.new_window(number, _class)).pack()
def new_window(self, number, _class):
self.new = tk.Toplevel(self.master)
_class(self.new, number)
class Win2:
def __init__(self, master, number):
self.master = master
self.master.geometry("800x800+200+200")
self.frame = tk.Frame(self.master)
self.quit = tk.Button(self.frame, text = f"Quit this window n. {number}", command = self.close_window)
self.quit.pack()
self.frame.pack()
def close_window(self):
self.master.destroy()
class Win3:
def __init__(self, master, number):
self.master = master
self.master.geometry("800x800+200+200")
self.frame = tk.Frame(self.master)
self.quit = tk.Button(self.frame, text = f"Quit this window n. {number}", command = self.close_window)
self.quit.pack()
self.label = tk.Label(self.frame, text="THIS IS ONLY IN THE THIRD WINDOW")
self.label.pack()
self.frame.pack()
def close_window(self):
self.master.destroy()
root = tk.Tk()
app = Win1(root)
root.mainloop()
我建议使用 .grid() 而不是 .pack(),因为它可以让您更好地控制如何放置小部件。使用 grid(),您可以选择设置列、行、padx 和 pady、粘性值以及其他值。
下面是一个使用网格在屏幕上呈现按钮的示例:
Button = Button(root, text="Button")
Button.grid(row=1, column=1)
要在使用 grid() 时将按钮居中放置在屏幕上,请添加“粘性”选项。
下面是实际使用的 stick 选项的示例:
Button = Button(root, text="Button")
Button.grid(row=1, column=1, sticky=N)
当使用粘性时,这里是您所有的选择:
- N 北或顶部中心
- S 南或底部中心
- E 东或右中
- 西西或左中
- NW 西北或左上
- NE 东北或右上
- 东南或右下角
- 西南或左下角
- NS 垂直拉伸小部件。但是,它离开了小部件
水平居中。
- EW 水平拉伸小部件。然而,它留下了
小部件垂直居中。
这是一个 link 的重要资源,您可以在其中了解有关使用 grid() 的更多信息:
我是 tkinter 的新手,我想尝试在 tkinter 中使用多个 windows。我从这里借用了代码:https://pythonprogramming.altervista.org/create-more-windows-with-tkinter/?doing_wp_cron=1645372524.8916330337524414062500 我希望能够将按钮从 window 的中间和顶部居中移动,但我不确定如何移动 window 中的按钮。我知道如何使用 pack() 通常将按钮移到 class 之外,但我不确定如何在 class 和此代码中执行此操作。当我尝试添加边或填充等属性时,window 会出现,但按钮不会出现。我到处寻找解决方案,但没有找到适合我的问题的解决方案
代码:
import tkinter as tk
class Win1:
def __init__(self, master):
self.master = master
self.master.geometry("800x800")
self.frame = tk.Frame(self.master)
self.butnew("Click to open Window 2", "2", Win2)
self.butnew("Click to open Window 3", "3", Win3)
self.frame.pack()
def butnew(self, text, number, _class):
tk.Button(self.frame, text = text, command= lambda: self.new_window(number, _class)).pack()
def new_window(self, number, _class):
self.new = tk.Toplevel(self.master)
_class(self.new, number)
class Win2:
def __init__(self, master, number):
self.master = master
self.master.geometry("800x800+200+200")
self.frame = tk.Frame(self.master)
self.quit = tk.Button(self.frame, text = f"Quit this window n. {number}", command = self.close_window)
self.quit.pack()
self.frame.pack()
def close_window(self):
self.master.destroy()
class Win3:
def __init__(self, master, number):
self.master = master
self.master.geometry("800x800+200+200")
self.frame = tk.Frame(self.master)
self.quit = tk.Button(self.frame, text = f"Quit this window n. {number}", command = self.close_window)
self.quit.pack()
self.label = tk.Label(self.frame, text="THIS IS ONLY IN THE THIRD WINDOW")
self.label.pack()
self.frame.pack()
def close_window(self):
self.master.destroy()
root = tk.Tk()
app = Win1(root)
root.mainloop()
我建议使用 .grid() 而不是 .pack(),因为它可以让您更好地控制如何放置小部件。使用 grid(),您可以选择设置列、行、padx 和 pady、粘性值以及其他值。
下面是一个使用网格在屏幕上呈现按钮的示例:
Button = Button(root, text="Button")
Button.grid(row=1, column=1)
要在使用 grid() 时将按钮居中放置在屏幕上,请添加“粘性”选项。
下面是实际使用的 stick 选项的示例:
Button = Button(root, text="Button")
Button.grid(row=1, column=1, sticky=N)
当使用粘性时,这里是您所有的选择:
- N 北或顶部中心
- S 南或底部中心
- E 东或右中
- 西西或左中
- NW 西北或左上
- NE 东北或右上
- 东南或右下角
- 西南或左下角
- NS 垂直拉伸小部件。但是,它离开了小部件 水平居中。
- EW 水平拉伸小部件。然而,它留下了
小部件垂直居中。
这是一个 link 的重要资源,您可以在其中了解有关使用 grid() 的更多信息: