【问题标题】:Tix ComboBox causes python2.7 to crashTix ComboBox 导致 python2.7 崩溃
【发布时间】:2011-02-18 17:33:11
【问题描述】:

我一直在使用 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())

非常难看,但现在阻止我崩溃;直到更聪明的人能给我一个更好的答案。 如果用户删除空间然后按“go”,它会再次导致崩溃!

【问题讨论】:

    标签: python tix


    【解决方案1】:

    我不是 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()
    

    【讨论】:

    • 我希望你在我第一次开始使用 Python 时就在场,并向我指出 wx! Wx 看起来很棒,并且有很好的文档。 . .我可能会重写 wx 中的所有内容
    猜你喜欢
    • 2018-01-23
    • 2020-12-02
    • 2013-11-11
    • 2011-01-24
    • 2015-02-23
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多