Frame erstellen, OK! Liste erstellen, OK! Liste in Frame?!?!

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Gast

Also ich hab mal eine kurze Frage:
ich habe mir schon viele Tuts zum Thema wxPython angeschaut und hab es auch hinbekommen, ein Fenster (wie z.B. ein Editor) zu erstellen. Eine Liste kann ich auch erstellen.

aber in den Beispielen ist immer nur eine Sache pro Fenster dargestellt.
Ich würde gerne einen Frame machen, in dem ein Textfeld und eine Liste eingebettet sind.

Kann mir mal jemand erklären, wie man das hinbekommt?
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Anonymous hat geschrieben:Also ich hab mal eine kurze Frage:
ich habe mir schon viele Tuts zum Thema wxPython angeschaut und hab es auch hinbekommen, ein Fenster (wie z.B. ein Editor) zu erstellen. Eine Liste kann ich auch erstellen.

aber in den Beispielen ist immer nur eine Sache pro Fenster dargestellt.
Ich würde gerne einen Frame machen, in dem ein Textfeld und eine Liste eingebettet sind.

Kann mir mal jemand erklären, wie man das hinbekommt?
Meinst du nur?
(auf jeden Fall sollte man controls auf ein Panel und nicht direkt auf das Frame legen)

Code: Alles auswählen

import wx

class MyApp(wx.App):
    def OnInit(self):
        frame = wx.Frame(None, title="Test with TextCtrl/ListBox")
        panel = wx.Panel(frame)
        text = wx.TextCtrl(panel, pos=(20, 20), value="TextCtrl")
        list = wx.ListBox(panel, pos=(20, 100), choices=["element1", "element2", "element3"])
        frame.Show(True)
        return True

app = MyApp(redirect=False)
app.MainLoop()
Gast

Traceback (most recent call last):
File "test.py", line 12, in ?
app = MyApp(redirect=False)
File "c:\wx.py", line 1957, in __init__
_wxStart(self.OnInit)
File "test.py", line 5, in OnInit
frame = wx.Frame(None, title="Test with TextCtrl/ListBox")
File "c:\frames.py", line 151, in __init__
self.this = framesc.new_wxFrame(*_args,**_kwargs)
TypeError: new_wxFrame() takes at least 3 arguments (2 given)
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Anonymous hat geschrieben:
Traceback (most recent call last):
File "test.py", line 12, in ?
app = MyApp(redirect=False)
File "c:\wx.py", line 1957, in __init__
_wxStart(self.OnInit)
File "test.py", line 5, in OnInit
frame = wx.Frame(None, title="Test with TextCtrl/ListBox")
File "c:\frames.py", line 151, in __init__
self.this = framesc.new_wxFrame(*_args,**_kwargs)
TypeError: new_wxFrame() takes at least 3 arguments (2 given)
Welche wxPython Version verwendest du? (ab 2.6 sollte es so funktionieren).

probiere die Zeile mit wx.Frame mit:

Code: Alles auswählen

frame = wx.Frame(None, -1, title="irgendwas")
Gast

hab überall ein "-1" hingemacht, dann gehts!
hab version 2.3 glaube ich
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Anonymous hat geschrieben:hab überall ein "-1" hingemacht, dann gehts!
hab version 2.3 glaube ich
um die wxPythonVersion herauszukriegen:

wie heisst das Verzeichnis, in das wxPython installiert wurde?

oder noch genauer:

Shellprompt oder z.B Pycrust öffnen

>>> import wx
>>> wx.VERSION_STRING
'2.6.0.0'
(für mich).

Das -1 ist der Identifier (id).
Den braucht man besonders, wenn man z.B. mehere TextCtrls hat und
mit der Bind Methode verschiedene Aktionen für die TextCtrls ausführen
möchte. Kurz gesagt, um die verschiedenen Controls zu unterscheiden.

Braucht man das nicht, braucht man bei neueren wxPy Versionen das
nicht angeben (id=-1 ist default).
Gast

dat sacht er bei mir
import wx
wx.VERSION_STRING
'2.4.2.4'
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Anonymous hat geschrieben:dat sacht er bei mir
import wx
wx.VERSION_STRING
'2.4.2.4'
Wenn möglich, updaten auf 2.6 :)

Es hat keinen Sinn, auf einer Version zu bleiben,
die schon so alt ist (ca. 2 Jahre).
Gast

ok, werde ich machen.
aber noch eine frage zum schluss.

hab versucht die menüleiste oben einzubauen

Code: Alles auswählen

#Status-Bar erzeugen
        self.CreateStatusBar()
        
        #Dateimenu erzeugen
        dateiMenu = wx.Menu()
        dateiMenu.Append(ID_NEW, "&Neu"," Neues Dokument anlegen")
        dateiMenu.Append(ID_OPEN, "&Datei Öffnen"," Datei öffnen")
        dateiMenu.Append(ID_OPEN_DIR, "&Ordner Öffnen"," Ordner öffnen")
        dateiMenu.Append(ID_SAVE, "&Speichern"," Datei speichern")
        dateiMenu.Append(ID_SAVE_NEW, "&Speichern unter"," Datei speichern unter")
        dateiMenu.AppendSeparator()
        dateiMenu.Append(ID_PRINT, "&Drucken"," Seite drucken")
        dateiMenu.Append(ID_PAGE_SETUP, "&Seite einrichten"," Seite einrichten")
        dateiMenu.AppendSeparator()
        dateiMenu.Append(ID_EXIT,"E&xit"," Programm schließen")
        
        #Übermenu erzeugen
        infoMenu = wx.Menu()
        infoMenu.Append(ID_ABOUT,"&Über"," Informationen zum Programm")
        
        #Bearbeitenmenu erzeugen
        editMenu = wx.Menu()
        editMenu.Append(ID_SEARCH, "Suchen", " Dokument durchsuchen")
        editMenu.Append(ID_SEARCH_REPLACE, "Suchen & ersetzen", " suchen & ersetzen")
        
        #Menuleiste erzeugen
        menuBar = wx.MenuBar()
        menuBar.Append(dateiMenu,"&Datei")
        menuBar.Append(editMenu,"&Bearbeiten")
        menuBar.Append(infoMenu,"Info")
        
        #Menubar an den Frame binden
        self.SetMenuBar(menuBar)
bekomme da diesen fehler:
Traceback (most recent call last):
File "Application.py", line 227, in ?
app = MyApp(redirect=False)
File "c:\wx.py", line 1957, in __init__
_wxStart(self.OnInit)
File "Application.py", line 14, in OnInit
self.CreateStatusBar()
AttributeError: MyApp instance has no attribute 'CreateStatusBar'
17:06:18: Debug: e:\Projects\wx2.4\src\msw\app.cpp(439): 'UnregisterClass(canvas)' failed with error 0x00000584 (diese Klasse hat noch geöffnete Fenster.).
Antworten