Seite 1 von 1

Notebook-Menu Problem: Tab unsichtbar

Verfasst: Montag 29. Oktober 2007, 08:59
von ete
Hallo!

Ich habe ein Programm in ein Tab meines Notebooks geladen und es funktioniert alles. Nun wollte ich ein Menu hinzufügen. Dies geht auch, nur wird jetzt das Programm im Tab nicht mehr angezeigt, nur wenn ich das Fenster vergrössere...

Hier mal mein Code:

Code: Alles auswählen

# -*- coding: cp1252 -*-

import wx

import mol
 
class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="Lab Tools", size=(600, 600))
        p = wx.Panel(self)

        # Create Menu Bar
        menu = wx.Menu()
        exit = menu.Append(-1, "Exit")
        self.Bind(wx.EVT_MENU, self.OnExit, exit)
        menuBar = wx.MenuBar()
        menuBar.Append(menu, "File")
        self.SetMenuBar(menuBar)

        # Create Notebook
        nb = wx.Notebook(p)

        # create the page windows as children of the notebook
        page1 = mol.MyFrame(nb)

        # add the pages to the notebook with the label to show on the tab
        nb.AddPage(page1, "Solution Calculator")

        # put the notebook in a sizer for the panel to manage the layout
        sizer = wx.BoxSizer()
        sizer.Add(nb, 1, wx.EXPAND)
        p.SetSizer(sizer)

    # functions
    def OnExit(self, event):
        self.Close()

if __name__ == "__main__":
    app = wx.App()
    MainFrame().Show()
    app.MainLoop()
Und mol.py :

Code: Alles auswählen

# -*- coding: cp1252 -*-

import wx

class MyFrame(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)                
        
        # Text
        txt = wx.StaticText(self, -1, "Compound", pos=(10, 50))
        txt = wx.StaticText(self, -1, "Example: Ba(OH)2", pos=(80, 80))
        txt = wx.StaticText(self, -1, "Molarity", pos=(10, 100))
        txt = wx.StaticText(self, -1, "mol / L", pos=(190, 100))
        txt = wx.StaticText(self, -1, "Volume", pos=(10, 150))
        txt = wx.StaticText(self, -1, "L", pos=(190, 150))

        # Eingabe Felder
        self.verbindung = wx.TextCtrl(self, size=(100, -1), pos=(80, 50))
        self.molaritaet = wx.TextCtrl(self, size=(100, -1), pos=(80, 100))
        self.volumen = wx.TextCtrl(self, size=(100, -1), pos=(80, 150))

        # Buttons
        btn = wx.Button(self, -1, "Ok", pos=(80, 180))

        # Event Binding
        self.Bind(wx.EVT_BUTTON, self.berechne, btn)

    # Funktion um Werte zu holen
    def get_verbindung(self, evt):
        verbindung = self.verbindung.GetValue()
        return verbindung

    def get_molaritaet(self, evt):
        molaritaet = self.molaritaet.GetValue()
        return molaritaet

    def get_volumen(self, evt):
        volumen = self.volumen.GetValue()
        return volumen

    # Berechnung der Masse
    def berechne(self, evt):

        mm = {'BaSO4': ('Bariumsulfat', '233'), 'CaC2': ('Calciumcarbid', '64.1')}
        
        verbindung = self.get_verbindung(evt)
        molaritaet = self.get_molaritaet(evt)
        volumen = self.get_volumen(evt)
        
        molmasse = mm[verbindung][1]
        masse = float(molmasse) * float(volumen) * float(molaritaet)
        text = 'Weight out ' + str(masse) + ' g .'
        
        # Ausgabe
        txt = wx.StaticText(self, -1, str(text), pos=(80, 220))
             
Kann mir jemand weiterhelfen?

Liebe Grüsse

Stefanie

Verfasst: Montag 29. Oktober 2007, 13:03
von Jan-Peer
Also wenn ich dein Programm unter Gentoo / Gnome ausführe wird das Fenster in einer vernünftigen Größe angezeigt. Menu("File") ist zu sehen, und das Programm im Tab auch. Vielleicht habe ich dein Problem jetzt aber auch falsch verstanden ...

Schönen Gruß

Jan-Peer

Verfasst: Montag 29. Oktober 2007, 13:47
von ete
Nein du hast es richtig verstanden. Bei mir wird das Tab und das Programm nicht angezeigt. Erst wenn ich es unten rechts vergrössere (nicht maximiere)...Woran kann das liegen? Benutze Windoof XP

Verfasst: Montag 29. Oktober 2007, 14:24
von BlackVivi
Das Problem hatte ich auch, ich errinere mich ganz leicht. Du kannst die Oberfläche aktualisieren, such danach hier mal im Forum...

Verfasst: Montag 29. Oktober 2007, 14:35
von gerold
ete hat geschrieben:Bei mir wird das Tab und das Programm nicht angezeigt. Erst wenn ich es unten rechts vergrössere (nicht maximiere)...Woran kann das liegen? Benutze Windoof XP
Hallo ete!

Erstelle zuerst das Frame. Gehe dann die Objekte von **oben nach unten** durch. Das heißt, dass du zuerst das Menü, dann (wenn nötig) eine Toolbar, dann das Panel und alles was im Panel ist. Dann die Statusbar (wenn nötig).

Hier noch einmal die Reihenfolge:
- Frame
- Menü
- Toolbar
- Panel (und alles was darin ist)
- Statusbar

Wenn das nicht hilft (was ich nicht glaube), dann kannst du mit ``sizer.Layout()`` eine Neuanordnung auslösen.

EDIT:

Oder auch mit ``p.SendSizeEvent()``. Aber auch ein ``p.Fit()`` und danach ein ``self.Fit()`` (was in deinem Fall sowiso ideal wäre), führt zu einer Neuanordnung der Widgets.

mfg
Gerold
:-)

Verfasst: Montag 29. Oktober 2007, 14:41
von BlackVivi
gerold hat geschrieben:Oder auch mit ``p.SendSizeEvent()``. Aber auch ein ``p.Fit()`` und danach ein ``self.Fit()`` (was in deinem Fall sowiso ideal wäre), führt zu einer Neuanordnung der Widgets.

mfg
Gerold
:-)
Genau das hatte mir damals geholfen...

Verfasst: Montag 29. Oktober 2007, 14:56
von ete
Ah danke für eure Hilfe, werde mich gleich mal an die Arbeit machen :D