Tkinter 对话框A位于主窗口中
先生,我学习tkinter有几个月了,我的问题是我不知道在哪里使用这个语句self.transient(master),因此当我的注册窗口出现对话框时Tkinter 对话框A位于主窗口中,tkinter,dialog,Tkinter,Dialog,先生,我学习tkinter有几个月了,我的问题是我不知道在哪里使用这个语句self.transient(master),因此当我的注册窗口出现对话框时 在我将在代码中使用瞬态语句的地方,对话框函数接受一个parent选项。从文件中: 使窗口成为文件对话框的逻辑父级。“文件”对话框已打开 显示在其父窗口的顶部。在Mac OS X上,这会使 将“文件”对话框转换为附着到父窗口的图纸 通常,在继承自Toplevel的类中,您将使用self。但是,您没有正确使用继承,因此如果不重写该类,继承将无法工作。
在我将在代码中使用瞬态语句的地方,对话框函数接受一个
parent
选项。从文件中:
使窗口成为文件对话框的逻辑父级。“文件”对话框已打开
显示在其父窗口的顶部。在Mac OS X上,这会使
将“文件”对话框转换为附着到父窗口的图纸
通常,在继承自Toplevel
的类中,您将使用self
。但是,您没有正确使用继承,因此如果不重写该类,继承将无法工作。所以首先,我们需要重写这个类
首先要做的是调用超类的\uuuu init\uuu
方法。这就是使您的注册窗口成为实际的顶级窗口的秘诀
from tkinter import *
import tkinter as tk
from tkinter import ttk
from tkinter.filedialog import askopenfilename
class menu():
def __init__(self, master):
self.master = master
master.title('Library Management Software')
master.geometry('1230x650')
master.configure(background="#98ff98")
master.iconbitmap("e:\library\image\save.ico")#adding icon on title window
menubar = Menu(master)
membermenu = Menu(menubar, tearoff=0)
membermenu.add_command(label = "Member" , command = self.reg_window)
menubar.add_cascade(label = "Entry", menu = membermenu)
master.config(menu = menubar)
def reg_window(self):
self.newWindow = tk.Toplevel(self.master)
self.app = registration_window(self.newWindow)
class registration_window(Toplevel):
def __init__(self, master):
self.master=master
#self.transient(master)
master.title('Registration Form')
master.geometry('1230x650')
master.configure(background="#98ff98")
master.iconbitmap("e:\library\image\save.ico")#adding icon on title window
item_file = StringVar()
image_label = Label(master, text="Photo: ", bg="gray74", relief="groove")
image_label.place(x=755,y=150)
item_entry = Entry(master, textvariable=item_file,width=35)
item_entry.place(x=795,y=150)
self.item_button = Button(master, text="\uD83D\uDCC2", relief="groove",
command=lambda:entry_set(item_entry, askopenfilename()))
self.item_button.place(x=1000, y=150, height=20, width=20)
def entry_set(entry, text):
item_entry.delete(0, 'end')
item_entry.insert(END, text)
def main():
root = tk.Tk()
app = menu(root)
root.mainloop()
if __name__ == '__main__':
main()
接下来,您需要删除self.master
或master
的所有其他用法,而是使用self
,以便所有小部件都在其内部。此外,在调用askopenfilename
时添加parent=self
。该类应如下所示:
class registration_window(Toplevel):
def __init__(self, master):
super().__init__(master)
...
class registration_window(Toplevel):
def __init__(self, master):
super().__init__(master)
self.title('Registration Form')
self.geometry('1230x650')
self.configure(background="#98ff98")
self.iconbitmap("e:\library\image\save.ico")#adding icon on title window
item_file = StringVar()
image_label = Label(self, text="Photo: ", bg="gray74", relief="groove")
image_label.place(x=755,y=150)
item_entry = Entry(self, textvariable=item_file,width=35)
item_entry.place(x=795,y=150)
self.item_button = Button(self, text="yes, this button", relief="groove",
command=lambda:entry_set(item_entry, askopenfilename(parent=self)))
self.item_button.place(x=1000, y=150, height=20, width=100)
def entry_set(entry, text):
item_entry.delete(0, 'end')
item_entry.insert(END, text)
最后,要使用这个类,您不需要创建另一个Toplevel
。将reg\u窗口更改为如下所示:
class registration_window(Toplevel):
def __init__(self, master):
super().__init__(master)
...
class registration_window(Toplevel):
def __init__(self, master):
super().__init__(master)
self.title('Registration Form')
self.geometry('1230x650')
self.configure(background="#98ff98")
self.iconbitmap("e:\library\image\save.ico")#adding icon on title window
item_file = StringVar()
image_label = Label(self, text="Photo: ", bg="gray74", relief="groove")
image_label.place(x=755,y=150)
item_entry = Entry(self, textvariable=item_file,width=35)
item_entry.place(x=795,y=150)
self.item_button = Button(self, text="yes, this button", relief="groove",
command=lambda:entry_set(item_entry, askopenfilename(parent=self)))
self.item_button.place(x=1000, y=150, height=20, width=100)
def entry_set(entry, text):
item_entry.delete(0, 'end')
item_entry.insert(END, text)
实际上,我相信,transient(…)
所做的是,它创建了一个窗口,但顾名思义,它是临时的。该窗口不会显示在TaskBar中,当您想从我的第二个窗口打开文件对话框时,您希望文件对话框实际执行什么操作。该对话框将显示在第一个窗口上。这是我的问题文件对话框
的哪一部分,比如你想要它做什么,询问目录还是文件名?我想打开一个图像文件,我想在一个条目小部件中捕获路径