raw_input阻止GUI出现

时间:2015-10-16 17:36:40

标签: python tkinter raw-input

我用Python编写了一个程序,允许我一次更改许多文件的名称。我有一个很奇怪的问题。

当我使用raw_input获取所需的扩展名时,GUI将无法启动。我没有收到任何错误,但窗口永远不会出现。

我尝试使用raw_input作为从用户获取文件扩展名以构建文件列表的方法。当不使用raw_input时,此程序将正常工作。我所指的代码部分位于我的globList函数中。出于某种原因,当使用raw_imput时,窗口将无法启动。

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的问题吗?

这个问题的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

这就是tkinter的定义方式。它是单线程的,所以当它等待用户输入时,它真正在等待。必须运行mainloop,以便GUI可以响应事件,包括内部事件,例如在屏幕上绘制窗口的请求。

一般来说,您不应该将GUI与来自stdin的读取输入混合。如果您正在创建GUI,请通过条目小部件从用户处获取输入。或者,在创建GUI之前获取用户输入。

可以在effbot网站上找到关于弹出对话框的体面教程:http://effbot.org/tkinterbook/tkinter-dialog-windows.htm