Pregunta

He estado usando TIX para crear un Combobox y causa un accidente intermitente si la caja de entrada se deja vacía.

Soy nuevo en Python y muy nuevo en la programación de GUI, así que he estado usando el ejemplo para enseñarme cosas.

Cuando utilice el siguiente código de ejemplo, debe poder ingresar un valor en el cuadro de entrada o seleccionar el menú desplegable, sin embargo, si deja el campo de entrada vacío y presione Ir, hará que el Python se bloquee.

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

========================= Detalles del choque:

  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] ¿Es algo que el ejemplo está haciendo mal?

b] ¿Hay una mejor manera?

c] ¿Debo estar usando TiX en absoluto?

Me he dado cuenta de que algunas personas parecen alejarse de Tix y solo usan Tkinter. ¿Hay alguna razón para esto? ¿No debería estar usando Tix?

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

OK, así que logré monkeypatch esto agregando valor= '' para que la cadena de retorno no esté vacía y luego lstrip () el valor cuando lo necesito.

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

muy feo, pero me impide estrellarse por ahora; Hasta que alguien más sabio puede darme una mejor respuesta. Si el usuario elimina el espacio y luego presiona 'Ir' ¡Volverá a causarlo!

¿Fue útil?

Solución

I am not Tix expert, but this should fix the problem:

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

In between the lines, I would recommend using wxPython for learning GUI programming. It was great for me as a learning environment.

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top