我正在编写一个执行以下序列的python程序:
1.打开/选择目录的对话框
2.执行某些操作
3.使用tkinter对话框重命名文件
4.执行其余操作
我写了以下代码:
def open_directory():
directory_name = filedialog.askdirectory(title='Ordner Auswählen',parent=root)
print(directory_name)
root.destroy()
def input_name():
def callback():
print(e.get())
root.quit()
e = ttk.Entry(root)
NORM_FONT = ("Helvetica", 10)
label = ttk.Label(root,text='Enter the name of the ROI', font=NORM_FONT)
label.pack(side="top", fill="x", pady=10)
e.pack(side = 'top',padx = 10, pady = 10)
e.focus_set()
b = ttk.Button(root, text = "OK", width = 10, command = callback)
b.pack()
def close_window():
root.destory()
root = tk.Tk()
root.withdraw()
open_directory() #dialogue box to select directory
<perform certain operations>
input_name() #dialgue box for user input file name
root.mainloop()
close_window() #exit the mainloop of tkinter
<perform rest of the functions>
但出现以下错误
Tclerror: NULL main window
我认为宣告root
为主要窗口确实很不错,但是我似乎找不到我犯错的地方。
对于我在这里尝试做的事情,还有其他更好的方法吗?
答案 0 :(得分:0)
就像@CommonSense提到的那样,当您使用撤消隐藏主窗口时,则需要使用方法deiconify
再次使用根。因此,如下更改函数change_directory
:
def open_directory():
directory_name = filedialog.askdirectory(title='Ordner Auswählen',parent=root)
print(directory_name)
root.deiconify()
如果不取消图标化窗口,则无法调用使用根窗口的函数input_name
。
我已经测试了此代码,并且可以正常工作。
PS:close_window
函数中还有一个错字(销毁窗口时)。
答案 1 :(得分:0)
按照@CommonSense的真实说法,您对.destroy()
和.quit()
的使用似乎并不是很周密。
不仅如此,您还需要使用触发器或事件来控制函数调用,否则它们只是直接运行一个就阻止了另一个运行,就像代码中的情况一样。
您还应该控制通过事件调用close_window()
的时间:
from tkinter import filedialog
import tkinter as tk
def open_directory():
directory_name = filedialog.askdirectory(title='Ordner Auswählen',parent=root)
print(directory_name)
#root.destroy()
input_name()
def input_name():
def callback():
print(e.get())
#root.quit()
es_variable=tk.StringVar()
e = tk.Entry(root, textvariable=es_variable)
NORM_FONT = ("Helvetica", 10)
label = tk.Label(root,text='Enter the name of the ROI', font=NORM_FONT)
label.pack(side="top", fill="x", pady=10)
e.pack(side = 'top',padx = 10, pady = 10)
e.focus_set()
b = tk.Button(root, text = "OK", width = 10, command = callback)
b.pack()
def close_window():
root.destory()
root = tk.Tk()
#root.withdraw()
open_dir_button = tk.Button(root, text = "Open Dialog", width = 10, command =open_directory)
open_dir_button.pack()
#dialogue box to select directory
#<perform certain operations>
#dialgue box for user input file name
root.mainloop()
#close_window() #exit the mainloop of tkinter
#<perform rest of the functions>