2011-02-18 7 views
2

J'ai utilisé Tix pour créer une comboBox et cela provoque un plantage intermittent si la boîte de saisie reste vide.Tix ComboBox provoque le plantage de python2.7

Je suis novice en Python et je suis très novice en matière de programmation graphique. J'ai donc utilisé l'exemple pour m'instruire. Lorsque vous utilisez l'exemple de code suivant, vous devez pouvoir entrer une valeur dans la zone de saisie ou sélectionner une forme dans le menu déroulant. Cependant, si vous laissez le champ vide et que vous appuyez sur OK, le python se bloque.

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

Alors

A ] est-ce quelque chose que l'exemple fait mal?

B] existe-t-il un meilleur moyen?

C] Dois-je utiliser du Tix?

J'ai remarqué que certaines personnes semblent se méfier de Tix et n'utilisent que Tkinter. Y a-t-il une raison à cela? Est-ce que je ne devrais pas utiliser Tix?

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

Ok, donc j'ai réussi à en ajoutant monkey-patch valeur = » 'si la chaîne de retour n'est pas vide, puis lstrip() la valeur quand j'en ai besoin. Très laid mais m'empêche de planter pour l'instant; jusqu'à ce que quelqu'un de plus sage puisse me donner une meilleure réponse. Si l'utilisateur supprime l'espace, puis appuie sur «Go», il va de nouveau tomber en panne!

Répondre

1

Je ne suis pas expert Tix, mais cela devrait résoudre le problème:

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

Entre les lignes, je vous conseille d'utiliser wxPython pour apprendre la programmation graphique. C'était génial pour moi en tant que milieu d'apprentissage.

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

Je souhaite que vous étiez là quand j'ai commencé à utiliser Python pour la première fois et m'a indiqué wx! Wx semble incroyable et a une bonne documentation. . . Je pourrais juste réécrire tout en wx – user600295

Questions connexes