【发布时间】:2021-09-26 20:45:02
【问题描述】:
我想创建一个 tkinter 窗口,当我单击按钮小部件时,它会打开一个新窗口,显示来自根/原始窗口的所有小部件,完全相同。本质上是创建根窗口的第二个实例,其中应用程序可以有多个用户,使用相同的 GUI,在不同的窗口中。
感谢任何帮助。
我的一个小部件示例:
summary_output = Text(
master=window,
height=8,
width=78,
bg="gray95",
borderwidth=2,
relief="groove",
font=("Arial", 12))
我的窗口布局
window = Tk()
window.title("Data Viewer")
window.geometry("750x950")
window.configure(bg='white')
window.iconphoto(False, tk.PhotoImage(file='icon.png'))
我有这个,但似乎无法从根窗口放置小部件:
def new_window():
newWindow = Toplevel(window)
newWindow.geometry("750x950")
newWindow.configure(bg='white')
newWindow.iconphoto(False, tk.PhotoImage(file='icon.png'))
upload_button.place(x=20, y=560)
mainloop()
他们是不是要把master改成任何窗口?
编辑:
from tkinter import *
class StaticFrame(Frame):
def __init__(self,master,*args,**kwargs):
Frame.__init__(self,master,*args,**kwargs)
# All your widgets
Label(self,text='This is a reusable frame',font=(0,17)).place(x=0, y=0)
Button(self,text='Click me for nothing').pack()
Label(self,text='End of page').pack()
upload_button = Button(
self,
text="Edit Data",
fg="DodgerBlue4",
font=("Graph Type", 15),
height=1, width=12,
borderwidth=2,
relief="groove")
upload_button.place(x=20, y=50)
root = Tk() # First window
top = Toplevel(root) # Second window
root.geometry("750x968")
StaticFrame(root).pack() # Put the frame on the first window
StaticFrame(top).pack() # Put the frame on the second window
root.mainloop()
结果:
【问题讨论】:
-
请参阅this 了解有关作业问题的信息。此外,问题必须表明研究工作;目前,您的问题没有显示任何研究工作。 Stack Overflow 上有大量关于如何创建和使用类的信息。
-
我相信您也可以使用大量在线教程。做一些研究,并发挥创造力。如果您对某些特定代码有特定错误,我们很乐意提供帮助。您还可以在 SO 上搜索
[python] class inheritance以获取有关类和创建自定义继承类的更多信息,但我给您链接的问题应该是一个开始。 -
@SamMatzko 如果它已经有了答案,为什么我找不到它们??
-
@TravisB:您的方法似乎是将小部件本身移动到一个新窗口中,这在 tkinter 中是不可能的。
upload_button有一个,也只有一个,master,那就是window(不是newWindow);调用upload_button.place()只会再次将其放入window。我提供的链接是关于另一种解决方案的:使用类和继承来创建一个自定义窗口类,它有自己的小部件。然后,您可以创建自定义窗口的实例,其方式与创建tkinter.Tk()实例的方式大致相同。您可以拥有任何您想要的数据存储。