2013-04-28 167 views
1

我正在製作一個程序來獲取多個用戶名並將它們存儲在一個XML文件中。 XML部分工作正常,但我在GUI中遇到問題。我希望能夠詢問用戶有多少用戶想要輸入,然後重複Entry那麼多次。我該怎麼做,同時保持quit的功能?我試過了:在python tkinter中多次獲取相同的輸入?

def quitter(): 
     exit() 
     quit() 

    quitterButton = Button(master, text="Quit", command=quitter) 
    mainCanvas.create_window(50, 330, window=quitterButton, tag="quitter") 
    num = int(raw_input("How many users are you going to put in?")) 
    for x in range(0,num): 

     #Create User entry Variable 
     userEnter = StringVar() 
     usrVar = "" 
     #Create enter box: 
     userEntryBox = Entry(master, textvariable = userEnter) 
     mainCanvas.create_window(250, 300, window=userEntryBox, tag="UserEnterA") 

     def gotInput(self): 
      usrVar = userEnter.get(); 
      mainCanvas.create_text(250, 330, text="User Inputted: " + usrVar, tags="0") 
      mainCanvas.delete("UserEnterA") 

     #Bind entry box 
     userEntryBox.bind('<Key-Return>', gotInput) 
     userEntryBox.wait_window(userEntryBox) 

     #Create a new user element 
     newUsr= ET.Element('Member') 

     #Add element to the Root 
     root.append(newUsr) 

     #Make a sub element Name, set name 
     usrName = ET.SubElement(newUsr, 'Name') 
     usrName.text = usrVar; 
     ... 
    tree.write('./output.xml') 

什麼是最好的方法來解決它?我不知道輸入的數量,我希望退出按鈕隨時都可以工作。

+0

是否需要使用'Canvas'而不是普通的幾何管理器? – kalgasnik 2013-04-28 18:01:34

+0

我對tkinter很新穎,我只知道包和帆布。其他人在那裏? @kalgasnik – elder4222 2013-04-28 18:55:40

回答

2

你的程序行爲對我來說有點不清楚,但我盡力幫忙。

第一個解決方案:顯示tkinter askstring對話框num次。如果用戶按Cancel按鈕,則可以中斷for循環。這不正是你想要的,但它很容易實現:

from tkinter import * 
import tkinter.simpledialog as simpledialog 

def add_users(): 
    n = simpledialog.askinteger('', 'How many users are you going to put in?', initialvalue=1, minvalue=1, maxvalue=10) 
    if not n: # 'Cancel' 
     return 
    for i in range(n): 
     user = simpledialog.askstring('', 'User #%s from #%s' % (i+1, n)) 
     if user is None: # 'Cancel' 
      return 
     # Do something useful 
     print(user) 

root = Tk() 
Button(root, text='Add users', command=add_users).pack(padx=50, pady=50) 
Button(root, text='Quit', command=root.destroy).pack(pady=30) 
root.mainloop() 

秒(如果你想要把輸入和所有的新名稱窗口quit按鈕):

from tkinter import * 
import tkinter.simpledialog as simpledialog 

class YourApp(): 
    def __init__(self): 
     self.root = Tk() 
     Button(self.root, text='Quit', command=self.root.destroy).pack(pady=20) 
     self.ask_button = Button(self.root, text='Add users', command=self.add_users) 
     self.ask_button.pack(padx=50, pady=50) 
     self.root.mainloop() 
    def add_users(self): 
     self.users_count = 0 
     self.user_name = StringVar() 
     self.frame = Frame(self.root) 
     self.frame.pack() 

     self.users_count = simpledialog.askinteger('', 'How many users are you going to put in?', initialvalue=1, minvalue=1, maxvalue=10) 
     self.user_entry = Entry(self.frame, textvariable=self.user_name) 
     self.user_entry.pack(pady=10) 
     self.user_entry.bind('<Key-Return>', self.on_new_user) 
     self.user_entry.focus_set() 
    def on_new_user(self, event): 
     # your code 
     print(self.user_name.get()) 
     Label(self.frame, text='User Inputted: %s' % self.user_name.get()).pack() 
     self.users_count -= 1 
     if not self.users_count: 
      self.user_entry.destroy() 
     self.user_name.set('') 

YourApp() 

Tkinter中有三個幾何管理器:place(與您的案例中的帆布非常相似),gridpackCanvas通常用於繪製圖片或圖形。

相關問題