TextCtrl leeren

Plattformunabhängige GUIs mit wxWidgets.
Antworten
cle1986
User
Beiträge: 18
Registriert: Donnerstag 7. September 2006, 12:44

Hallo!

Ich arbeite gerade an einer GUI in wxPython. Da ich allerdings Anfägner in Python bin habe ich noch einige Probleme.

Wie kann ich die erstellten TextCtrl durch Buttonklick zurücksetzen?
Wie kann ich den Ausgabetext des OpenFileDialoges (FilePath) in ein TextCtrl schreiben?

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import sys, os, wx
from wxPython.wx import *

class MainWindow(wx.Frame):
    
    global bx, by, tx, ty
    bx = 75
    by = 24
    tx = 100
    ty = 20
    
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id, 'Pysmig', size=(300,190))
        panel = wx.Panel(self,-1)
        start = wx.Button(panel, label="Start", pos=(0,130), size=(bx,by))
        #start.Bind(wx.EVT_BUTTON, self.start)
        cancel = wx.Button(panel, label="Cancel/Reset", pos=(76,130), size=(bx,by))
        cancel.Bind(wx.EVT_BUTTON, self.reset)
        look = wx.Button(panel, label="Durchsuchen", pos=(195,20), size=(bx,by))
        filet = look.Bind(wx.EVT_BUTTON, self.looking)
        
        starttime = wx.TextCtrl(panel, pos=(85,80), size=(tx,ty))
        endtime = wx.TextCtrl(panel, pos=(85,50), size=(tx,ty))
        filet = wx.TextCtrl(panel, pos=(85,23),size=(tx,ty))
        
        label = wx.StaticText(panel, label="Datei:", pos=(5,26))
        label2 = wx.StaticText(panel, label="Startzeit [s]:", pos=(5,53))
        label3 = wx.StaticText(panel, label="Endzeit, Dauer:", pos=(5,83))
        
        self.box = wx.StaticBox(panel, -1, "Simulation", size=(290,120), pos=(0,0))
    def looking(self,evt):
           app = wx.PySimpleApp()
           wildcard = "Python source (*.py)|*.py"
           dialog = wx.FileDialog(None, "File auswählen", os.getcwd(),
                                   "", wildcard, wx.OPEN)
           if dialog.ShowModal() == wx.ID_OK:
               print dialog.GetPath()
               #return(dialog.GetPath())
           dialog.Destroy()
    def start(self):
        execfile(filet)        
    def reset(self,evt):
        panel.starttime.Clear()
        
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MainWindow(parent=None, id=-1)
    frame.Show()
    app.MainLoop()
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

herzlich willkommen im Forum.

Text setzten:

Code: Alles auswählen

wx.TextCtrl(panel,-1,"text text text")
oder

Code: Alles auswählen

TextCtrlInstance.SetValue("text")
Löschen:

Code: Alles auswählen

TextCtrlInstance.Clear()
Schau mal was die Demo so bietet, da stehen solche Sachen mit vielen Beispielen drin.

Gruß,
Christian
cle1986
User
Beiträge: 18
Registriert: Donnerstag 7. September 2006, 12:44

Danke für die Antwort, aber leider hilft mir das überhaupt nicht weiter.

Wie du im obrigen Code sehen kannst, möchte ich mittels Klick auf einen Button Cancel/Reset die Textfelder zurücksetzen.

Wenn der Button gedrückt wird, dann soll dies mit der Methode

Code: Alles auswählen

def reset(self,evt):
        panel.filet.Clear()
        panel.endtime.Clear()
        panel.starttime.Clear()
geschehen.

Doch leider weiss ich nicht, wie ich den Code schreiben muss, dass Python auch weiss, dass es die 3 Textfelder zurücksetzten soll.
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Das Problem ist, das in der Funktion reset kein "panel" definiert ist.

Ich würde die TextCtrls als Klassenattribute definieren ("self.endtime" etc.), dann kannst du sie in reset auch genauso wieder ansprechen.


Code: Alles auswählen

self.starttime = wx.TextCtrl(panel, pos=(85,50), size=(tx,ty))
self.endtime = wx.TextCtrl(panel, pos=(85,80), size=(tx,ty))
self.filet = wx.TextCtrl(panel, pos=(85,23),size=(tx,ty))
und dann

Code: Alles auswählen

def reset(self,evt):
    self.starttime.Clear()
    self.endtime.Clear()
    self.filet.Clear()
Ach ja, ich hab noch die Position von starttime und endtime vertauscht, die passten nicht zu den Labels.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Das sind Fehler, die mir am Anfang auch andauernd passiert sind - und jetzt habe ich bei Dir, "cle1986", nicht drauf geachtet. Hätte ich vielleicht tun sollen.

Davon nicht entmutigen lassen.

Gruß,
Christian
Antworten