Als Einsteiger habe ich folgendes Problem: Ich möchte, ein SpinCtrl und einen Slider haben, deren Werte sich gegenseitig aktualisieren (wxPython 2.6.3.0, Python 2.4, winXP SP2).
Das klappt soweit auch. Wenn man in dem SpinCtrl allerdings von Hand eine Zahl eingibt und das SpinCtrl dann mit Tab verlässt, wird der Slider nicht aktualisiert.
Ich wollte das so lösen, indem ich auf den EVT_KILL_FOCUS event reagiere. Leider klappt dies nicht, wie ich es mir vorstelle.
Mit der Erzeugung des Dialogs mache ich vermutlich auch noch etwas falsch, da sich das Programm - auch bei Schließen des angezeigten Dialogs - nicht beendet.

Für jede Hilfe oder jeden Hinweis bin ich dankbar.
Hier der Code:
Code: Alles auswählen
import wx
import wx.xrc as xrc
class AppFrame(wx.Frame):
def OnKill(self, event):
b = wx.MessageBox("KILL!!")
def OnSpin(self, event):
print self.spin.GetValue()
self.slider.SetValue(self.spin.GetValue())
def OnScrollChanged(self, event):
self.spin.SetValue(self.slider.GetValue())
print 'sliding'
def __init__(self):
wx.Frame.__init__( self,
None, -1, "",
style=wx.DEFAULT_FRAME_STYLE )
res = xrc.XmlResource('slider.xrc')
dialog = res.LoadDialog(self, "ID_DIALOG")
self.slider = wx.xrc.XRCCTRL(dialog, 'ID_SLIDER')
self.spin = wx.xrc.XRCCTRL(dialog, 'ID_SPINCTRL')
dialog.Bind(wx.EVT_SPINCTRL, self.OnSpin, self.spin)
dialog.Bind(wx.EVT_SCROLL_CHANGED, self.OnScrollChanged, self.slider)
dialog.Bind(wx.EVT_KILL_FOCUS, self.OnKill, self.spin)
dialog.Show(True)
app = wx.PySimpleApp()
frame = AppFrame()
app.MainLoop()
Code: Alles auswählen
<?xml version="1.0" encoding="windows-1252"?>
<resource version="2.3.0.1" xmlns="http://www.wxwidgets.org/wxxrc">
<object class="wxDialog" name="ID_DIALOG">
<style>wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX</style>
<exstyle>wxWS_EX_BLOCK_EVENTS</exstyle>
<size>400,300</size>
<title>slider</title>
<centered>1</centered>
<object class="wxBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<flag>wxALIGN_CENTER_HORIZONTAL|wxALL</flag>
<border>5</border>
<object class="wxSpinCtrl" name="ID_SPINCTRL">
<style>wxSP_ARROW_KEYS</style>
<value>0</value>
<min>0</min>
<max>100</max>
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_CENTER_HORIZONTAL|wxALL</flag>
<border>5</border>
<object class="wxSlider" name="ID_SLIDER">
<style>wxSL_HORIZONTAL</style>
<value>0</value>
<min>0</min>
<max>100</max>
</object>
</object>
</object>
</object>
</resource>