Skip to main content
 首页 » 编程设计

python之Tix ComboBox导致python2.7崩溃

2025年05月04日9oomusou

我一直在使用 Tix 创建一个组合框,如果输入框留空,它会导致间歇性崩溃。

我是 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 

所以

A] 这个例子做错了吗?

B]有没有更好的方法?

C] 我应该使用 Tix 吗?

我注意到有些人似乎回避 Tix,只使用 Tkinter。是否有一个原因?我不应该使用 Tix 吗?

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

好的,所以我设法通过添加 value =' ' 对此进行了猴子修补,因此返回字符串不为空,然后在需要时 lstrip() 该值。

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

非常难看,但暂时不会让我崩溃;直到有更聪明的人能给我更好的答案。 如果用户删除空格然后按“开始”,它会再次导致崩溃!

请您参考如下方法:

我不是 Tix 专家,但这应该可以解决问题:

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()