events

Plattformunabhängige GUIs mit wxWidgets.
Antworten
rkruggel
User
Beiträge: 21
Registriert: Mittwoch 9. März 2005, 11:40
Wohnort: Altena, Westf.
Kontaktdaten:

Hallo Liste,

ich habe ein kleines Problem welches ich jedoch nicht lösen kann.
Warscheinlich mangels 'Basiswissen'. Ich möchte euch bitten mir ein
wenig auf die Sprünge zu helfen.

Ich bin bei den ersten gehversuchen mit wxPython.

Folgendes Szenario. (der Einfachheit halbe stark gekürzt)

1) File-1: Ich habe ein wx.Frame. Darin ist ein textCtrl und zwei
staticText enthalten. Ausserdem ist noch ein wxPanel vorhanden.
Das textCtrl erhält ein event EVT_TEXT.

2) File-2: Enthält nur ein textCtrl.
Das textCtrl erhält ebenfalls ein event EVT_TEXT.

File-2 wird in das wxPanel von File-1 eingebettet. Wenn ich das
programm nun starte sehe ich zwei Textfelder und zwei
Eingabefelder. Bis hier her keine Probleme.

Was soll geschehen:
Wenn Text eingegeben wird, soll er in den dazugehörigen textCtrl's
gleichzeitig angezeigt werden. Eigentlich recht trivial. Mit dem
texCtrl und staticText aus File-1 funktioniert das auch
einwandfrei. (Also die events laufen richtig) Aber ich weis die
Daten von dem textCtrl in File-2 nicht in das staticText in File-1
anzuzeigen.

Ich hoffe ich habe das verständlich rübergebracht. Ich drehe mich
hier total im Kreis. Google hilft mir auch nicht wirklich.

Schön wäre eine Erklährung, ein kurzes Code-Fragment oder was zu
lesen. Aber bitte in deutsch.

Vielen Dank schon mal im vorraus
cu
Roland
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Hallo,

kannst Du die zwei dateien hier reinposten?
Bitte

Code: Alles auswählen

 Code 
tags verwenden (nehme an, der
source ist nicht zu lange)
rkruggel
User
Beiträge: 21
Registriert: Mittwoch 9. März 2005, 11:40
Wohnort: Altena, Westf.
Kontaktdaten:

hier ist der Quellcode.

file1

Code: Alles auswählen

#Boa:Frame:Frame1

import wx
from File2 import Panel2

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1PANEL1, wxID_FRAME1PANEL2, wxID_FRAME1STATICTEXT1, 
 wxID_FRAME1STATICTEXT2, wxID_FRAME1TEXTCTRL1, 
] = [wx.NewId() for _init_ctrls in range(6)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(507, 408), size=wx.Size(581, 319),
              style=wx.DEFAULT_FRAME_STYLE, title='Frame1')
        self.SetClientSize(wx.Size(581, 319))

        self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
              label='staticText1', name='staticText1', parent=self,
              pos=wx.Point(150, 32), size=wx.Size(51, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
              label='staticText2', name='staticText2', parent=self,
              pos=wx.Point(150, 72), size=wx.Size(51, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL1,
              name='textCtrl1',  parent=self, pos=wx.Point(30, 32),
              size=wx.Size(80, 21), style=0,  value='textCtrl1')
        self.textCtrl1.Bind(wx.EVT_TEXT, self.OnTextCtrl1Text,
              id=wxID_FRAME1TEXTCTRL1)

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1',
              parent=self, pos=wx.Point(32, 72), size=wx.Size(104, 32),
              style=wx.TAB_TRAVERSAL)

        self.panel2 = Panel2(id=wxID_FRAME1PANEL2, name='panel2', 
              parent=self.panel1, pos=wx.Point(0,0), size=wx.Size(104, 32),
              style=wx.TAB_TRAVERSAL)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def OnTextCtrl1Text(self, event):
        wert = self.textCtrl1.GetValue()
        self.staticText1.SetLabel(wert)
        event.Skip()


if __name__ == '__main__':
    app = wx.PySimpleApp()
    wx.InitAllImageHandlers()
    frame = create(None)
    frame.Show()

    app.MainLoop()
und der file2

Code: Alles auswählen

import wx

[wxID_PANEL2, wxID_PANEL2TEXTCTRL2,] = [wx.NewId() for _init_ctrls in range(2)]

class Panel2(wx.Panel):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Panel.__init__(self, id=wxID_PANEL2, name=u'Panel2',
              parent=prnt,
              pos=wx.Point(0, 0), size=wx.Size(107, 35),
              style=wx.TAB_TRAVERSAL)
        self.SetClientSize(wx.Size(107, 35))

        self.textCtrl2 = wx.TextCtrl(id=wxID_PANEL2TEXTCTRL2,
              name=u'textCtrl2', parent=self, pos=wx.Point(0, 0),
              size=wx.Size(80, 21), style=0, value=u'textCtrl2')
        self.textCtrl2.Bind(wx.EVT_TEXT, self.OnTextCtrl1Text,
              id=wxID_PANEL2TEXTCTRL2)

    def __init__(self, parent, id, pos, size, style, name):
        self._init_ctrls(parent)

    def OnTextCtrl1Text(self, event):
        event.Skip()
Ich hoffe das hilft. Ich komme hier wirklich nicht weiter. Ein kleiner (oder etwas größerer) Denkanstoß wäre gut.

Edit (Leonidas): Code in Python Tags gesetzt
cu
Roland
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Hallo,

schon viel besser :wink:

file2:

Code: Alles auswählen

def OnTextCtrl1Text(self, event):
    wert = self.textCtrl2.GetValue()
    self.GetParent().GetParent().staticText2.SetLabel(wert)
    #oder staticText2
    event.Skip() 
mit GetParent() holst Du zuerst das Panel, davon dann die Frame
und greifst dadurch auf das static control zu.
rkruggel
User
Beiträge: 21
Registriert: Mittwoch 9. März 2005, 11:40
Wohnort: Altena, Westf.
Kontaktdaten:

:))
Dank zu sagen wäre viel zu wenig.

Vielen vielen Dank.

Mit GetParent() lag ich schon richtig bei meinen Versuchen, aber ich hatte eines zu wenig. Jetzt komme ich endlich weiter.
cu
Roland
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Francesco hat geschrieben:Bitte

Code: Alles auswählen

 Code 
tags verwenden (nehme an, der
source ist nicht zu lange)
Bitte

Code: Alles auswählen

Python
Tags verwenden, dann gibts auch Highlighting.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

rkruggel hat geschrieben::))
Dank zu sagen wäre viel zu wenig.

Vielen vielen Dank.

Mit GetParent() lag ich schon richtig bei meinen Versuchen, aber ich hatte eines zu wenig. Jetzt komme ich endlich weiter.
Hallo, freut mich.

Ich verwende oft einfach nur print statements oder pycrust als Shell.
DrPython ist auch gut geeignet (Dynamic Script oder testscript
erstellen, oder prompt in Drpython starten).

mfg
Antworten