Events, die nicht funktionieren

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ich komme bei events nicht weiter, ich habe einen Dialog erzeugt:

Zum Aufrufen:

Code: Alles auswählen

#!/usr/bin/python

from wx import App
from startdialog import Startdialog

app = App(redirect=False)
dial = Startdialog(None, -1, 'test')
dial.ShowModal()
dial.Destroy()
app.MainLoop()

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx
import imag
from voktrainer import listctrl

class Startdialog(wx.Dialog):
      def __init__ (self, parent, id, title):
          wx.Dialog.__init__(self, parent, id, title, size=(580, 350))

            
          vonnach = ['Deutsch->Englisch', 'Englisch->Deutsch']
          anzahlvok = ['10', '20', '30', '50', '100', '150', '200', '500', 'Alle']         

          panel = wx.Panel(self, -1)

          vbox = wx.BoxSizer(wx.VERTICAL)
          hbox1 = wx.BoxSizer(wx.HORIZONTAL)
          hbox2 = wx.BoxSizer(wx.HORIZONTAL)
          hbox3 = wx.BoxSizer(wx.HORIZONTAL)
                   
          # StaticBox
          box = wx.StaticBox(self, -1, 'Einstellungen')
          bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
          fgs = wx.FlexGridSizer(2, 3, 20, 80)
          fgs.Add(wx.StaticText(self, -1, 'Übersetzten von:'), 1)
          fgs.Add(wx.StaticText(self, -1, 'Wie viele Vokabeln?'), 1)
          fgs.Add(wx.StaticText(self, -1, 'Durcheinander Abfragen?'), 1)
          fgs.Add(wx.ComboBox(self, 11, 'Deutsch->Englisch', choices=vonnach, style=wx.CB_READONLY), 1)
          fgs.Add(wx.ComboBox(self, 12, 'Alle', choices=anzahlvok, style=wx.CB_DROPDOWN), 1)
          fgs.Add(wx.CheckBox(self, 13, 'Ja?', style=wx.ALIGN_RIGHT), 1)
          bsizer.Add(fgs, 1)
          # hbox1
          hbox1.Add(bsizer, 1)
          vbox.Add(hbox1, 1, wx.ALIGN_CENTER | wx.ALL, 10)
          
          # fgs2
          fgs2 = wx.FlexGridSizer(2, 3, 5, 5)
          bmp = imag.deutschland.GetBitmap()
          fgs2.Add(wx.StaticBitmap(self, -1, bmp, (80, 50), (bmp.GetWidth(), bmp.GetHeight())), 0, wx.LEFT | wx.RIGHT, 10)
          self.textctrl2 = wx.TextCtrl(self, -1, size=(359, -1))
          fgs2.Add(self.textctrl2, 1, wx.ALL, 5)
          fgs2.Add(wx.Button(self, 21, 'Schließen'), 1, wx.ALL, 4)
          bmp = imag.england.GetBitmap()
          fgs2.Add(wx.StaticBitmap(self, -1, bmp, (80, 50), (bmp.GetWidth(), bmp.GetHeight())), 0, wx.LEFT | wx.RIGHT, 10)
          self.textctrl3 = wx.TextCtrl(self, -1, size=(359, -1))
          fgs2.Add(self.textctrl3, 1, wx.ALL, 5)
          fgs2.Add(wx.Button(self, 22, 'Weiter'), 1, wx.ALL, 4)
          vbox.Add(fgs2, 1)
          
          # hbox2
          self.listctrl2 = listctrl(self, -1, style=wx.LC_REPORT | wx.LC_SORT_ASCENDING | wx.LC_SINGLE_SEL | wx.LC_NO_HEADER, cols=[('', 10), ('', 100), ('', 100)])           
          hbox2.Add(self.listctrl2, 24)
          # StaticBox 2
          box2 = wx.StaticBox(self, -1, 'Info')
          bsizer2 = wx.StaticBoxSizer(box2, wx.VERTICAL)
          fgs2 = wx.FlexGridSizer(4, 2, 2, 12)
          fgs2.Add(wx.StaticText(self, -1, 'Minuten:'), 1)
          self.time = wx.StaticText(self, -1, '0.00')
          fgs2.Add(self.time, 1)
          fgs2.Add(wx.StaticText(self, -1, 'Richtig:'), 1)
          self.richtig = wx.StaticText(self, -1, '0')
          fgs2.Add(self.richtig, 1)
          fgs2.Add(wx.StaticText(self, -1, 'Falsch:'), 1)
          self.falsch = wx.StaticText(self, -1, '0')
          fgs2.Add(self.falsch, 1)
          fgs2.Add(wx.StaticText(self, -1, 'Verbleibend:'))
          self.verbleibend = wx.StaticText(self, -1, 'Alle')
          fgs2.Add(self.verbleibend, 1)
          bsizer2.Add(fgs2, 1)
          hbox2.Add(bsizer2, 7, wx.LEFT, 10)
          vbox.Add(hbox2, 1, wx.EXPAND | wx.LEFT | wx.RIGHT, 10)
          
          self.SetSizer(vbox)         
          
          self.Bind(wx.EVT_TEXT, self.on_select_abfrage, id=11)
          self.Bind(wx.EVT_TEXT, self.on_select_anzahl, id=12)
          self.Bind(wx.EVT_CHECKBOX, self.on_durcheinander, id=13)
          
          self.Bind(wx.EVT_BUTTON, self.on_schliesen, id=21)
          self.Bind(wx.EVT_BUTTON, self.on_weiter, id=22)
          
          self.Bind(wx.EVT_CLOSE, self.on_quit)
          
          self.Centre()
          #self.ShowModal()

          def on_select_abfrage(self, event):
              pass
          def on_select_anzahl(self, event):
              pass
          def on_durcheinander(self, event):
              pass
          def on_weiter(self, event):
              pass
          def on_schliesen(self, event):
              pass
          def on_quit(self):
              print 'wtf'
              self.Close()
die Listctrl für den Import:

Code: Alles auswählen

class listctrl(wx.ListCtrl, wx.lib.mixins.listctrl.ListCtrlAutoWidthMixin, wx.lib.mixins.listctrl.TextEditMixin):
    def __init__(self, parent, ID, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, editable=False, cols=[('Vokabel-', 200), ('liste', 160), ('laden', wx.LIST_AUTOSIZE)]):
        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
        
        wx.lib.mixins.listctrl.ListCtrlAutoWidthMixin.__init__(self)
        self.cols = cols
        self.Columns()
        if editable:
            wx.lib.mixins.listctrl.TextEditMixin.__init__(self)

    def Columns(self):
        c = 0
        for col, size in self.cols:
            self.InsertColumn(c, col)   
            self.SetColumnWidth(c, size)
            c += 1

        #self.currentItem = 0
und die import imag:

Code: Alles auswählen

from wx.lib.embeddedimage import PyEmbeddedImage

# ***************** Catalog starts here *******************

catalog = {}
index = []

#----------------------------------------------------------------------
england = PyEmbeddedImage(
    "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")
index.append('england')
catalog['england'] = england
getenglandData = england.GetData
getenglandImage = england.GetImage
getenglandBitmap = england.GetBitmap

#----------------------------------------------------------------------
deutschland = PyEmbeddedImage(
    "iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAMAAACsowi2AAAAAXNSR0IArs4c6QAAAARnQU1B"
    "AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA"
    "AwBQTFRF/70Y/wAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    "AAAAAAAAAAAAAAAAAAAAAAAAgFaMTgAAAC5JREFUOE/t0KEBAAAMgzC6/4/eDbiK4jHhdOjj"
    "tlizXrHo0Ee2WLNeMdYEhMADopwGcyT5Fm8AAAAASUVORK5CYII=")
index.append('deutschland')
catalog['deutschland'] = deutschland
getdeutschlandData = deutschland.GetData
getdeutschlandImage = deutschland.GetImage
getdeutschlandBitmap = deutschland.GetBitmap

Jetzt der Fehler:

Code: Alles auswählen

C:\Python26\code\projekte\Vokabeltrainer>startdialogtest.py
Traceback (most recent call last):
  File "C:\Python26\code\projekte\Vokabeltrainer\startdialogtest.py", line 9, in
 <module>
    dial = Startdialog(None, -1, 'test')
  File "C:\Python26\code\projekte\Vokabeltrainer\startdialog.py", line 77, in __
init__
    self.Bind(wx.EVT_TEXT, self.on_select_abfrage, id=11)
AttributeError: 'Startdialog' object has no attribute 'on_select_abfrage'
ich weis echt nicht an was es liegen könnte
the more they change the more they stay the same
BlackJack

@Dav1d: Die Fehlermeldung verrät doch woran es liegt: Du hast in der Klasse keine `on_select_abfrage()` definiert. Schau mal *genau* hin *wo* Du die definiert hast.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

oh mann wie ich mich schäme

danke, manchmal sieht man den wald vor lauter Bäumen nicht (jetzt versteh ich die Wendung auch)
the more they change the more they stay the same
Antworten