Question

J'utilise TIX pour créer un ComboBox et il provoque un crash intermittent si la boîte d'entrée est laissée vide.

Je suis nouveau à Python et à la programmation de GUI très nouvelle pour que j'utilise d'exemple pour m'apprendre à moi-même.

Lorsque vous utilisez l'exemple suivant du code, vous devez être capable de saisir une valeur dans la zone d'entrée ou de sélectionner le menu déroulant, cependant, si vous laissez le champ de saisie vide et que vous appuyez sur Go, le python s'écrase.

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

========================= Détails du crash:

  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] est-ce quelque chose que l'exemple fait mal?

b] Y a-t-il une meilleure façon?

c] Dois-je utiliser TIX du tout?

J'ai remarqué que certaines personnes semblent s'éloigner de TIX et utilisent uniquement Tkinter. Y a-t-il une raison à cela? Devrais-je ne pas utiliser tix?

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

OK, j'ai donc réussi à monkeyychatch ceci en ajoutant la valeur= '' de sorte que la chaîne de retour n'est pas vide, puis lstrip () la valeur lorsque j'en ai besoin.

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

très moche mais m'empêche de m'échapper pour l'instant; Jusqu'à ce que quelqu'un sinon puisse me donner une meilleure réponse. Si l'utilisateur supprime l'espace, puis appuie sur "Go", il va de nouveau crash!

Était-ce utile?

La solution

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top