Seite 1 von 1

wx.radiobutton es tut sich nix !

Verfasst: Samstag 17. Januar 2009, 13:04
von sea-live
servus leute ich bin fast am verzweifeln
suche schon seit stunden im netz und bekomm das mit den radiobutton nicht hin

soll Radiobuttons unabhängig voneinander ein und ausschalten

abfrage des jeweiligen zustandes

Code: Alles auswählen

# -*- coding: cp1252 -*-
import sys
import os
import wx
import  wx.lib.scrolledpanel as scrolled 

class Hpgl_Viewer_Mill(wx.Frame):
    def __init__(self, parent=None, id=-1, title='test RADIOBUTTEN'):
       
        wx.Frame.__init__(self, parent, id, title,pos=(10,10), size=(300, 370))

        
        # Panel für Button und Scrollfenster
        panel = wx.Panel(self, -1, size=(300,350))
        #Button
        self.button = wx.Button(panel, -1, "Beenden")

        #Radiobutton
        self.rb_umriss = wx.RadioButton(panel, 1004, 'Platinen_Ummriss',size=wx.DefaultSize)
        self.rb_einelinie = wx.RadioButton(panel, 1005, 'nur 1 Linie',size=wx.DefaultSize)
        self.rb_umriss.SetValue(True)
        self.rb_einelinie.SetValue(False)

        #'horizontal arangment oben      
        self.eingabesizer = wx.BoxSizer(wx.HORIZONTAL)
        self.eingabesizer.Add( self.button,0,wx.ALIGN_LEFT)      
        #'horizontal arangment unten      
        self.auswahlsizer = wx.BoxSizer(wx.HORIZONTAL)
        self.auswahlsizer.Add( self.rb_umriss,0,wx.ALIGN_LEFT)
        self.auswahlsizer.Add((5, 5))
        self.auswahlsizer.Add( self.rb_einelinie,0,wx.ALIGN_LEFT)

        self.platine = (580,480)
        size = self.platine #(580, 580)

        #Scrollfenster
        self.scrollw = wx.ScrolledWindow(panel, -1,
                                    style=wx.SUNKEN_BORDER, size=(250,250))
        self.scrollw.SetScrollbars(1, 1, self.platine[0]-2,self.platine[1]-2)
       
        #Sizer
        mainsizer = wx.BoxSizer(wx.VERTICAL)
        mainsizer.Add((10, 10))
        mainsizer.Add(self.eingabesizer, 0, wx.ALIGN_CENTER)
        mainsizer.Add((10, 10))
        mainsizer.Add(self.scrollw, 0, wx.ALIGN_CENTER)
        mainsizer.Add((5, 5))
        mainsizer.Add(self.auswahlsizer, 0, wx.ALIGN_CENTER)
        panel.SetSizer(mainsizer)

        #Bindungen
        self.Bind(wx.EVT_BUTTON, self.close, self.button)
        self.Bind(wx.EVT_RADIOBUTTON, self.umriss, id=1004)
        self.Bind(wx.EVT_RADIOBUTTON, self.einelinie, id=1005)

        # Bild, auf dem die Grafik gezeichnet wird
        self.bmp = self.get_base_bitmap(size)
       
        # Aufruf Paint-Event
        self.scrollw.Bind(wx.EVT_PAINT, self.on_paint)
       
        # und jetzt wird gezeichnet
        self.drawPicture()
    def Zoom(self):
        self.bmp = self.get_base_bitmap(self.platine)
        self.drawPicture()
        self.scrollw.Scroll(self.platine[0]-2,self.platine[1]-2)
        self.scrollw.Scroll(1,1)
        
    def get_base_bitmap(self, size):
        bmp = wx.EmptyBitmap(*size)
        self.dr = wx.MemoryDC(bmp)
        self.dr.SetBackground(wx.WHITE_BRUSH)
        self.dr.Clear()
        self.dr.SelectObject(wx.NullBitmap)
        return bmp
    
    def einelinie(self,event):
        #print 'hier einelinie'
        #print self.rb_einelinie.GetId()
        #print self.rb_einelinie.GetValue()
        if self.rb_einelinie.GetValue() == True:
            self.rb_einelinie.SetValue(False)
        else:
            self.rb_einelinie.SetValue(True)
        #print self.rb_einelinie.GetValue()
        self.Zoom()

    def umriss(self,event):
        #print 'hier ummriss'
        #print self.rb_umriss.GetValue()
        if self.rb_umriss.GetValue()== True:
            self.rb_umriss.SetValue(False)
        else:
            self.rb_umriss.SetValue(True)
        self.Zoom()
    
    def on_paint(self, event=None):
        wx.BufferedPaintDC(self.scrollw, self.bmp, style=wx.BUFFER_VIRTUAL_AREA)
       
    def drawPicture(self):
        self.dr = wx.MemoryDC(self.bmp)
        self.dr.SelectObject(wx.NullBitmap)
        """
        Hier soll er was mit dem button druck tun
        dazu muss sich ja was ändern beim drücken des RADIOBUTTON
        """
        print self.rb_einelinie.GetValue()

    def close(self, event):
        self.Destroy()

    def OnCloseWindow(self, event=None):
        self.Destroy()

def main():
    
    app = wx.PySimpleApp()
    fenster = Hpgl_Viewer_Mill()
    fenster.Center()
    fenster.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()


Verfasst: Samstag 17. Januar 2009, 13:57
von HWK
Die Zeilen 83-86 und 93-96 kannst Du getrost löschen. Dann bräuchte man auch nur eine einzige Methode für beide Radiobuttons, die auch mit einer einzigen Anweisung gebunden werden kann, z.B.:

Code: Alles auswählen

self.Bind(wx.EVT_RADIOBUTTON, self.radiobutton_methode)
Übrigens: Statt der expliziten Angabe einer ID sollte man -1 verwenden und Radiobuttons sind nicht unabhängig voneinander. Das wären Checkboxen.
MfG
HWK

Verfasst: Samstag 17. Januar 2009, 14:35
von sea-live
DANKE DAS WARS

Code: Alles auswählen

# -*- coding: cp1252 -*-
import sys
import os
import wx
import  wx.lib.scrolledpanel as scrolled 

class Hpgl_Viewer_Mill(wx.Frame):
    def __init__(self, parent=None, id=-1, title='test chekbox'):
       
        wx.Frame.__init__(self, parent, id, title,pos=(10,10), size=(300, 370))

        
        # Panel für Button und Scrollfenster
        panel = wx.Panel(self, -1, size=(300,350))
        #Button
        self.button = wx.Button(panel, -1, "Beenden")

        #Radiobutton
        self.rb_umriss = wx.CheckBox(panel,-1, 'Platinen_Ummriss',size=wx.DefaultSize)
        self.rb_einelinie = wx.CheckBox(panel,-1, 'nur 1 Linie',size=wx.DefaultSize)
        self.rb_umriss.SetValue(True)
        self.rb_einelinie.SetValue(False)

        #'horizontal arangment oben      
        self.eingabesizer = wx.BoxSizer(wx.HORIZONTAL)
        self.eingabesizer.Add( self.button,0,wx.ALIGN_LEFT)      
        #'horizontal arangment unten      
        self.auswahlsizer = wx.BoxSizer(wx.HORIZONTAL)
        self.auswahlsizer.Add( self.rb_umriss,0,wx.ALIGN_LEFT)
        self.auswahlsizer.Add((5, 5))
        self.auswahlsizer.Add( self.rb_einelinie,0,wx.ALIGN_LEFT)

        self.platine = (580,480)
        size = self.platine #(580, 580)

        #Scrollfenster
        self.scrollw = wx.ScrolledWindow(panel, -1,
                                    style=wx.SUNKEN_BORDER, size=(250,250))
        self.scrollw.SetScrollbars(1, 1, self.platine[0]-2,self.platine[1]-2)
       
        #Sizer
        mainsizer = wx.BoxSizer(wx.VERTICAL)
        mainsizer.Add((10, 10))
        mainsizer.Add(self.eingabesizer, 0, wx.ALIGN_CENTER)
        mainsizer.Add((10, 10))
        mainsizer.Add(self.scrollw, 0, wx.ALIGN_CENTER)
        mainsizer.Add((5, 5))
        mainsizer.Add(self.auswahlsizer, 0, wx.ALIGN_CENTER)
        panel.SetSizer(mainsizer)

        #Bindungen
        self.Bind(wx.EVT_BUTTON, self.close, self.button)
        self.Bind(wx.EVT_CHECKBOX, self.Zoom )
        #self.Bind(wx.EVT_EVT_CHECKBOX, self.einelinie, id=1005)

        # Bild, auf dem die Grafik gezeichnet wird
        self.bmp = self.get_base_bitmap(size)
       
        # Aufruf Paint-Event
        self.scrollw.Bind(wx.EVT_PAINT, self.on_paint)
       
        # und jetzt wird gezeichnet
        self.drawPicture()
    def Zoom(self,event=None):
        self.bmp = self.get_base_bitmap(self.platine)
        self.drawPicture()
        self.scrollw.Scroll(self.platine[0]-2,self.platine[1]-2)
        self.scrollw.Scroll(1,1)
        
    def get_base_bitmap(self, size):
        bmp = wx.EmptyBitmap(*size)
        self.dr = wx.MemoryDC(bmp)
        self.dr.SetBackground(wx.WHITE_BRUSH)
        self.dr.Clear()
        self.dr.SelectObject(wx.NullBitmap)
        return bmp
   
    def on_paint(self, event=None):
        wx.BufferedPaintDC(self.scrollw, self.bmp, style=wx.BUFFER_VIRTUAL_AREA)
       
    def drawPicture(self):
        self.dr = wx.MemoryDC(self.bmp)
        self.dr.SelectObject(wx.NullBitmap)
        print self.rb_einelinie.GetValue()

    def close(self, event):
        self.Destroy()

    def OnCloseWindow(self, event=None):
        self.Destroy()

def main():
    
    app = wx.PySimpleApp()
    fenster = Hpgl_Viewer_Mill()
    fenster.Center()
    fenster.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()
so aplikation läuft
5 MB mit py2exe generiert ziemlich viel für so eine kleine datei
kann man da was machen !

Bild

Verfasst: Samstag 17. Januar 2009, 20:27
von martin101986
Hallo sea-live,

ich glaub da wird sich nicht mehr viel machen lassen wegen des Speicherplatzes. Die ganzen DLL's von wx benötigen schon einiges an Speicherplatz.
Du könntest höchstens noch die library.zip durchschauen und wenn er nicht benötigte Module mitgepackt hat diese löschen.

Da ich beruflich auch mit Eagle zu tun habe, hab dein Programm mein Interesse geweckt. Was für eine Funktion soll das Programm erfüllen?

Grüße
Martin