2015-10-16 68 views
0

我已經用Python編寫了一個程序,允許我一次更改多個文件的名稱。我有一個很奇怪的問題。raw_input停止GUI出現

當我使用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的問題嗎?

什麼是解決問題的好方法?

+0

您使用的是IDE:

在彈出對話框一個體面的教程可以在effbot網站上找到? – Kevin

回答

0

這是如何定義tkinter的工作。它是單線程的,所以在等待用戶輸入時,它確實在等待。 mainloop必須正在運行,以便GUI可以響應事件,包括內部事件,例如請求在屏幕上繪製窗口。

一般來說,您不應該將圖形用戶界面與標準輸入讀取輸入混合在一起。如果您正在創建GUI,請通過輸入窗口小部件獲取用戶的輸入。或者,在創建GUI之前獲取用戶輸入。 http://effbot.org/tkinterbook/tkinter-dialog-windows.htm