wx.radiobutton es tut sich nix !

Plattformunabhängige GUIs mit wxWidgets.
Antworten
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Samstag 17. Januar 2009, 13:04

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

Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Samstag 17. Januar 2009, 13:57

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
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Samstag 17. Januar 2009, 14:35

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
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Samstag 17. Januar 2009, 20:27

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
Antworten