Tix ComboBox вызывает сбой python2.7 - PullRequest
2 голосов
/ 18 февраля 2011

Я использовал Tix для создания comboBox, и он вызывает прерывистый сбой, если поле ввода оставить пустым.

Я новичок в 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

So

A] что-то в примере не так?

B] есть ли лучший способ?

C] Должен ли я вообще использовать Tix?

Я заметил, что некоторые люди, кажется, уклоняются от Tix и используют только Tkinter. Для этого есть причина? Я не должен использовать Tix?

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

Хорошо, так что мне удалось сделать это, добавив значение = '', чтобы возвращаемая строка не была пустой, а затем lstrip () значение, когда мне это нужно.

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

Очень некрасиво, но мешает мне сейчас разбиться; пока кто-то мудрее не сможет дать мне лучший ответ. Если пользователь удалит пробел, а затем нажмет «go», это снова вызовет сбой!

1 Ответ

1 голос
/ 12 апреля 2011

Я не эксперт по 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()
...