wo finde ich eine demo für spin.GetValue

Plattformunabhängige GUIs mit wxWidgets.
Antworten
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

hallo, ich möchte diesen befehl anwenden in wxpython : spin.GetValue .
ich möchte den eingestellten wert im spin weiterverarbeiten.
finde keine lösung.

mfg
tim2611
User
Beiträge: 3
Registriert: Sonntag 4. Mai 2008, 22:11

Hallo,

nehmen wir an, Du hast ein SpinCtrl erzeugt:

Code: Alles auswählen

self.scAnzahl = wx.SpinCtrl(panel, -1, '', pos=(25,42), size=(60,30))
Nun kannst Du mittels self.scAnzahl.GetValue() den Wert auslesen.

Code: Alles auswählen

wert = self.scAnzahl.GetValue()
Gruß
Timo
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

ich habe ja dem spin ein event gegeben:

self.spin_ctrl_1 = wx.SpinCtrl(self, -1, "")
self.spin_ctrl_1.SetRange(0, 100)
self.spin_ctrl_1.SetValue(0)
self.Bind(wx.EVT_SPIN, self.printet, self.spin_ctrl_1)

aber beim anklicken zum hochzählen wird der wert nicht geprintet .woran liegt das?


Code: Alles auswählen

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        
        self.spin_ctrl_1 = wx.SpinCtrl(self, -1, "")
        self.spin_ctrl_1.SetRange(0, 100)
        self.spin_ctrl_1.SetValue(0)
        self.Bind(wx.EVT_SPIN, self.printet, self.spin_ctrl_1)
        
        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle("frame_1")
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_1.Add(self.spin_ctrl_1, 0, 0, 0)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        self.Layout()
        # end wxGlade

# end of class MyFrame

    def printet(self, event):
        global wert
        wert = self.spin_ctrl_1.GetValue()
        print wert

class MyApp(wx.App):
    def OnInit(self):
        wx.InitAllImageHandlers()
        frame_1 = MyFrame(None, -1, "")
        self.SetTopWindow(frame_1)
        frame_1.Show()
        return 1

# end of class MyApp

if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()
tim2611
User
Beiträge: 3
Registriert: Sonntag 4. Mai 2008, 22:11

weil Dein Event falsch ist ;)
Falsch:

Code: Alles auswählen

self.Bind(wx.EVT_SPIN, self.printet, self.spin_ctrl_1)
Richtig:

Code: Alles auswählen

self.Bind(wx.EVT_SPINCTRL, self.printet, self.spin_ctrl_1)
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

jup, danke. das wars.
hatte dieses aus einem wxpython-demo:

Code: Alles auswählen

self.spin = wx.SpinButton(self, -1,
                                  (w, 50),
                                  (h*2/3, h),
                                  wx.SP_VERTICAL)
        self.spin.SetRange(1, 100)
        self.spin.SetValue(1)

        self.Bind(wx.EVT_SPIN, self.OnSpin, self.spin)

und das andere mit wxglade angefertigt, da ist mir das garnicht aufgefallen das mit "wx.SpinButton" und "wx.SpinCtrl".
tim2611
User
Beiträge: 3
Registriert: Sonntag 4. Mai 2008, 22:11

und das andere mit wxglade angefertigt, da ist mir das garnicht aufgefallen das mit "wx.SpinButton" und "wx.SpinCtrl".
Wenn Du wxGlade benutzt, kannst Du in den Eigenschaften das Event einstellen ;) Da passiert das nicht so schnell.

LG
Tim2611
Antworten