2011-02-18 63 views
2

我一直在使用Tix創建一個comboBox,如果輸入框留空,它會導致間歇性崩潰。Tix ComboBox導致python2.7崩潰

我是新來的Python和GUI編程非常新,所以我一直在使用示例來教自己的東西。

使用下面的示例代碼時,您應該能夠在輸入框中輸入值或從下拉菜單中選擇表單,但是如果將輸入字段留空並按下go,則會導致python崩潰。

import Tix 
import tkMessageBox 

class App(object): 
    def __init__(self, window): 
     window.winfo_toplevel().wm_title("test") 
     self.window = window 

     self.combo = Tix.ComboBox(window) 
     self.combo.insert(Tix.END, 'thing1') 
     self.combo.insert(Tix.END, 'thing2') 
     self.combo.entry['state'] = "normal" 
     self.combo['editable'] = True 
     self.combo.pack() 

     button = Tix.Button(window) 
     button['text'] = "Go" 
     button['command'] = self.go 
     button.pack() 

    def go(self): 
     tkMessageBox.showinfo('info', self.combo['selection']) 

if __name__ == '__main__': 
    root = Tix.Tk() 
    App(root) 
    root.mainloop() 

========================= 崩潰詳情:

Problem signature: 
    Problem Event Name: APPCRASH 
    Application Name: python2.7.exe 
    Application Version: 0.0.0.0 
    Application Timestamp: 4cfbf049 
    Fault Module Name: ntdll.dll 
    Fault Module Version: 6.1.7600.16385 
    Fault Module Timestamp: 4a5bdb3b 
    Exception Code: c0000005 
    Exception Offset: 0002e23e 
    OS Version: 6.1.7600.2.0.0.256.48 
    Locale ID: 2057 
    Additional Information 1: 0a9e 
    Additional Information 2: 0a9e372d3b4ad19135b953a78882e789 
    Additional Information 3: 0a9e 
    Additional Information 4: 0a9e372d3b4ad19135b953a78882e789 

所以

一]這個例子做錯了什麼?

B]有沒有更好的方法?

C]我應該使用Tix嗎?

我注意到有些人似乎迴避TIX,只使用Tkinter。是否有一個原因?我應該不使用Tix嗎?

++++++++++++++++++++++++++++

確定,所以我管理通過增值猴補丁此=」',以便返回字符串不爲空,然後在我需要時返回lstrip()值。

self.combo = Tix.ComboBox(window, value =' ') 
... 
tkMessageBox.showinfo('info', self.combo['selection'].lstrip()) 

非常難看,但阻止我從現在崩潰;直到有人更聰明才能給我更好的答案。 如果用戶刪除空間,然後按'走'它會再次導致崩潰!

回答

1

我不是專家蒂克斯,但是這應該可以解決問題:

tkMessageBox.showinfo('info', self.combo.entry.get()) 

在字裏行間,我會建議使用wxPython學習GUI編程。作爲一個學習環境,我感到非常愉快。

import wx 

class MainWin(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 

     self.combo = wx.ComboBox(self, choices=["Thing 1", "Thing 2"])  
     self.button = wx.Button(self, label="Go") 
     self.button.Bind(wx.EVT_BUTTON, self.OnButton) 

     self.sizer = wx.BoxSizer(wx.VERTICAL) 
     self.sizer.Add(self.combo, 0, wx.EXPAND) 
     self.sizer.Add(self.button, 0, wx.EXPAND) 
     self.SetSizerAndFit(self.sizer)  

     self.Show() 

    def OnButton(self, e): 
     wx.MessageBox(self.combo.GetValue()) 

app = wx.App(False) 
main_win = MainWin(None) 
app.MainLoop() 
+0

我希望你在那裏,當我第一次開始使用Python,並指出我寬x! Wx看起來很神奇,並且有很好的文檔。 。 。 我只是可能會重寫wx中的所有內容 – user600295 2011-04-14 17:20:38