raw_input 停止显示 GUI
raw_input stops GUI from appearing
我在 Python 中编写了一个程序,允许我一次更改多个文件的名称。我有一个问题很奇怪。
当我使用 raw_input 获取我想要的扩展时,GUI 不会启动。我没有收到任何错误,但是 window 永远不会出现。
我尝试使用 raw_input 作为从用户那里获取文件扩展名以构建文件列表的方法。当 raw_input 不是 used.The 我所指的代码部分在我的 globList 函数中时,该程序将正常工作。由于某些原因,当使用 raw_imput 时,window 将不会启动。
import os
import Tkinter
import glob
from Tkinter import *
def changeNames(dynamic_entry_list, filelist):
for index in range(len(dynamic_entry_list)):
if(dynamic_entry_list[index].get() != filelist[index]):
os.rename(filelist[index], dynamic_entry_list[index].get())
print "The files have been updated!"
def drawWindow(filelist):
dynamic_entry_list = []
my_row = 0
my_column = 0
for name in filelist:
my_column = 0
label = Tkinter.Label(window, text = name, justify = RIGHT)
label.grid(row = my_row, column = my_column)
my_column = 1
entry = Entry(window, width = 50)
dynamic_entry_list.append(entry)
entry.insert(0, name)
entry.grid(row = my_row, column = my_column)
my_row += 1
return dynamic_entry_list
def globList(filelist):
#ext = raw_input("Enter the file extension:")
ext = ""
desired = '*' + ext
for name in glob.glob(desired):
filelist.append(name)
filelist = []
globList(filelist)
window = Tkinter.Tk()
user_input = drawWindow(filelist)
button = Button(window, text = "Change File Names", command = (lambda e=user_input: changeNames(e, filelist)))
button.grid(row = len(filelist) + 1 , column = 1)
window.mainloop()
这是 raw_input 的问题吗?
什么是解决问题的好方法?
这就是 tkinter 定义的工作方式。它是单线程的,因此在等待用户输入时它是真正的等待。 mainloop
必须是 运行 以便 GUI 可以响应事件,包括内部事件,例如请求在屏幕上绘制 window。
一般来说,您不应将 GUI 与从标准输入读取输入混合在一起。如果您正在创建 GUI,请通过条目小部件从用户那里获取输入。或者,在创建 GUI 之前获取用户输入。
可以在 effbot 网站上找到关于弹出对话框的不错的教程:http://effbot.org/tkinterbook/tkinter-dialog-windows.htm
我在 Python 中编写了一个程序,允许我一次更改多个文件的名称。我有一个问题很奇怪。
当我使用 raw_input 获取我想要的扩展时,GUI 不会启动。我没有收到任何错误,但是 window 永远不会出现。
我尝试使用 raw_input 作为从用户那里获取文件扩展名以构建文件列表的方法。当 raw_input 不是 used.The 我所指的代码部分在我的 globList 函数中时,该程序将正常工作。由于某些原因,当使用 raw_imput 时,window 将不会启动。
import os
import Tkinter
import glob
from Tkinter import *
def changeNames(dynamic_entry_list, filelist):
for index in range(len(dynamic_entry_list)):
if(dynamic_entry_list[index].get() != filelist[index]):
os.rename(filelist[index], dynamic_entry_list[index].get())
print "The files have been updated!"
def drawWindow(filelist):
dynamic_entry_list = []
my_row = 0
my_column = 0
for name in filelist:
my_column = 0
label = Tkinter.Label(window, text = name, justify = RIGHT)
label.grid(row = my_row, column = my_column)
my_column = 1
entry = Entry(window, width = 50)
dynamic_entry_list.append(entry)
entry.insert(0, name)
entry.grid(row = my_row, column = my_column)
my_row += 1
return dynamic_entry_list
def globList(filelist):
#ext = raw_input("Enter the file extension:")
ext = ""
desired = '*' + ext
for name in glob.glob(desired):
filelist.append(name)
filelist = []
globList(filelist)
window = Tkinter.Tk()
user_input = drawWindow(filelist)
button = Button(window, text = "Change File Names", command = (lambda e=user_input: changeNames(e, filelist)))
button.grid(row = len(filelist) + 1 , column = 1)
window.mainloop()
这是 raw_input 的问题吗?
什么是解决问题的好方法?
这就是 tkinter 定义的工作方式。它是单线程的,因此在等待用户输入时它是真正的等待。 mainloop
必须是 运行 以便 GUI 可以响应事件,包括内部事件,例如请求在屏幕上绘制 window。
一般来说,您不应将 GUI 与从标准输入读取输入混合在一起。如果您正在创建 GUI,请通过条目小部件从用户那里获取输入。或者,在创建 GUI 之前获取用户输入。
可以在 effbot 网站上找到关于弹出对话框的不错的教程:http://effbot.org/tkinterbook/tkinter-dialog-windows.htm