Seite 1 von 1

TextCtrl-Element wird nicht auf gesamten Panel vergrößert

Verfasst: Freitag 8. Dezember 2006, 21:59
von calo
Hallo Python-Gemeinde,

'habe ich folgendes Script:

Code: Alles auswählen

import wx

class EditPanel(wx.Panel):
	def __init__(self, parent):
		p = wx.Panel.__init__(self, parent)
		t = wx.TextCtrl(self, 1, "", style=wx.TE_MULTILINE)

class MainFrame(wx.Frame):
	def __init__(self):
		wx.Frame.__init__(self, None, title="Simple Notebook Example")

		p = wx.Panel(self)
		nb = wx.Notebook(p)
		editPanel = EditPanel(nb)
		nb.AddPage(editPanel, "Edit")

		sizer = wx.BoxSizer()
		sizer.Add(nb, 1, wx.EXPAND)
		p.SetSizer(sizer)


if __name__ == "__main__":
	app = wx.App()
	MainFrame().Show()
	app.MainLoop()
Da ich GUI-Neuling bin, verstehe ich nicht weshalb das TextCtrl-Element in Zeile 6, nicht auf das gesamte Panel ausgebreitet. Was mache ich hier falsch?

(WinXP Home, Python 2.4, wxPython ??)

Gruß, Calo

Re: TextCtrl-Element wird nicht auf gesamten Panel vergrößer

Verfasst: Samstag 9. Dezember 2006, 00:05
von gerold
calo hat geschrieben:Da ich GUI-Neuling bin, verstehe ich nicht weshalb das TextCtrl-Element in Zeile 6, nicht auf das gesamte Panel ausgebreitet.
Hi Calo!

Willkommen im Python-Forum!

Die Sache ist ganz einfach. Nur das erste Widget, welches auf ein Frame gelegt wird, wird automatisch auf die volle Größe des Frame-Innenraums vergrößert.
Du hast ein TextCtrl auf ein Panel gelegt und dich nicht selbst darum gekümmert, dass es sich an die Größe des Panels anpasst.

Hier ein funktionierendes Beispiel:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import wx

wx.SetDefaultPyEncoding("iso-8859-1")


class EditPanel(wx.Panel):

    def __init__(self, parent):
        
        wx.Panel.__init__(self, parent)
        
        vbox = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(vbox)
        
        t = wx.TextCtrl(self, 1, "", style = wx.TE_MULTILINE)
        vbox.Add(t, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)


class MainFrame(wx.Frame):

    def __init__(self):
        
        wx.Frame.__init__(self, None, title = "Simple Notebook Example")
        
        p = wx.Panel(self)
        
        vbox = wx.BoxSizer(wx.VERTICAL)
        p.SetSizer(vbox)
        
        nb = wx.Notebook(p)
        vbox.Add(nb, 1, wx.ALL | wx.EXPAND, border = 5)
        
        edit_panel1 = EditPanel(nb)
        nb.AddPage(edit_panel1, "Edit 1")
        
        edit_panel2 = EditPanel(nb)
        nb.AddPage(edit_panel2, "Edit 2")


if __name__ == "__main__":
    app = wx.App()
    f = MainFrame()
    f.Center()
    f.Show()
    app.MainLoop()
mfg
Gerold
:-)

Verfasst: Samstag 9. Dezember 2006, 12:16
von calo
Hallo Gerold,

vielen Dank für die Hilfe. Jetzt funktioniert's :)

Eine kleine Frage habe ich aber immer noch. Und zwar hat es nicht gleich auf Anhieb geklappt (es hatte sich ein kleiner Tippfehler beim Übertragen eingeschlichen). Die Fehlermeldung dazu erschien leider nur ganz kurz auf dem neuen Fenster, so dass ich es gar nicht lesen konnte. Gibt es eine Möglichkeit den Fehlertext in einem abstürzenden Frame abzufangen und zu speichern? ... oder das Frame beim Absturz kurz anzuhalten (eine Art 'pause'-Funktion)?

Danke :)

Grüßle, Calo

Verfasst: Samstag 9. Dezember 2006, 14:55
von gerold
calo hat geschrieben:Die Fehlermeldung dazu erschien leider nur ganz kurz auf dem neuen Fenster
Hi Calo!

Wenn du das Programm nicht über einen Doppelklick auf ein Symbol, sondern über die DOS-Konsole startest, dann bleiben dir auch die Fehlermeldungen erhalten.

- Start --> Ausführen --> ``CMD``
- Dann in den Ordner wechseln, in dem dein Python-Programm ist. (mit ``CD``)
- ``C:\Python24\python.exe NAME_DEINES_PROGRAMMES.PY``
- Bzw: ``NAME_DEINES_PROGRAMMES.PY`` (ohne die Angabe der Python-EXE)

mfg
Gerold
:-)

Verfasst: Montag 11. Dezember 2006, 17:06
von calo
Hallo Gerold,

leider ... unabhängig davon wie ich das Script starte, wird der Fehlertext nicht im CMD-Fenster (Eingabeaufforderung, DOS-Shell, oder wie es auch heißen mag ... :wink: ) ausgegeben sondern in einem neu entstehenden Fenster mit dem Titel "stdout/stderr". Ich habe die Beobachtung gemacht, dass wenn ich das Script aus einer Python-Shell heraus starte (>>> execfile('script.py') ) dann das Fehlerfenster länger stehen bleibt. Auf diesem Wege ist die Fehlermeldung lesbar. Versucht man es aber anschließend zu schließen, dann reißt es auch den Python-Interpreter, mit in den Absturz.

Mache ich eine Ausgabe mit Hilfe des 'print'-Befehls, erfolgt dies im CMD-Fenster. 'stderr'-Ausgaben hingegen erfolgen in dem neuen Fenster.

Grüßle, Calo

Verfasst: Montag 11. Dezember 2006, 22:18
von HWK
Versuch mal

Code: Alles auswählen

    app = wx.App(False)
MfG
HWK

Verfasst: Dienstag 12. Dezember 2006, 07:20
von calo
Hallo HWK,

vielen Dank ... jetzt erfolgt die Fehlerausgabe im CMD-Fenster :)

Grüßle, Calo