TIX Combobox provoque un crash de Python2.7
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
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!
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()