Seite 1 von 1

Fett gedruckter Menü-Eintrag

Verfasst: Donnerstag 8. März 2007, 15:15
von HWK
Man sieht ja immer wieder Menüs, die fett gedruckte Einträge enthalten, z.B. Schließen im Taskbar bei Windows. Gibt es in wxPython eine Möglichkeit, das zu erreichen?
Danke
HWK

Verfasst: Donnerstag 8. März 2007, 15:19
von sape
Hi.

Habs noch nicht gesteste, aber vielleicht Funktioniert ja SetFont. Könntest dir ein Font zusammenbasteln das bolded ist, und den ``wxMenuItem`` dieses Font übergeben.

EDIT: Ups, leider nur Windows only.

Verfasst: Donnerstag 8. März 2007, 16:49
von HWK
Ja, stimmt! Manchmal sieht man den Wald vor lauter Bäumen nicht. 'Windows only' reicht mir.
Danke
HWK

Verfasst: Donnerstag 8. März 2007, 20:56
von HWK
So, ich hab's jetzt mal probiert. Zum einen muss man erst das MenuItem mit dem entsprechenden Font erstellen, bevor man es zum Menü hinzufügt, damit die Änderung sichtbar wird. Zum anderen sind die Einträge ab dem geänderten Font alle um ein Zeichen nach rechts verschoben. Das zweite ist schon etwas störend. Gibt's dafür eine Erklärung bzw. besser eine Lösung?

Code: Alles auswählen

import  wx

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Playing with menus', size=(400, 200))
        self.CenterOnScreen()
        tc = wx.TextCtrl(self, -1, '''Probetext''',
                         style=wx.TE_READONLY|wx.TE_MULTILINE)
        menuBar = wx.MenuBar()
        menu1 = wx.Menu()
        menu1.Append(101, '&Mercury')
        menu1.Append(102, '&Venus')
        item = wx.MenuItem(menu1, 103, '&Erde')
        font = item.GetFont()
        font.SetWeight(wx.FONTWEIGHT_BOLD)
        font = wx.Font(font.GetPointSize(), font.GetFamily(), font.GetStyle(),
                       font.GetWeight())
        item.SetFont(font)
        menu1.AppendItem(item) 
        menu1.AppendSeparator()
        menu1.Append(104, '&Close')
        menuBar.Append(menu1, '&Planets')
        self.SetMenuBar(menuBar)
        self.Bind(wx.EVT_MENU, self.Menu101, id=101)
        self.Bind(wx.EVT_MENU, self.Menu102, id=102)
        self.Bind(wx.EVT_MENU, self.Menu103, id=103)
        self.Bind(wx.EVT_MENU, self.CloseWindow, id=104)

    def Menu101(self, event):
        print 'Merkur'

    def Menu102(self, event):
        print 'Venus'

    def Menu103(self, event):
        print 'Erde'

    def CloseWindow(self, event):
        self.Close()

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()
[Edit] Ich hab's jetzt erst mal notdürftig gelöst, indem ich auch dem ersten Eintrag einen neuen (allerdings unveränderten) Font zugewiesen habe. Dann stimmt die Ausrichtung. Wenn man dann aber Bitmaps zufügt, kommt alles wieder durcheinander. Scheint ein bisschen chaotisch implementiert zu sein.
MfG
HWK

Verfasst: Donnerstag 8. März 2007, 21:40
von gerold
HWK hat geschrieben:Zum anderen sind die Einträge ab dem geänderten Font alle um ein Zeichen nach rechts verschoben.
Hi HWK!

Das war meine Gegenprobe:

Code: Alles auswählen

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

import wx

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


class MyFrame(wx.Frame):
    
    def __init__(
        self, parent = None, id = -1, title = "Example", size = wx.Size(550, 420)
    ):
        
        wx.Frame.__init__(self, parent, id, title, size = size)
        
        # Menubar
        menubar = wx.MenuBar()
        
        # File-Menu
        mnu_file = wx.Menu()
        
        mnu_f_new = mnu_file.Append(-1, "&New\tCTRL+N")
        self.Bind(wx.EVT_MENU, self.new_file, mnu_f_new)
        
        mnu_f_open = wx.MenuItem(mnu_file, text = "&Open\tCTRL+O")
        font = mnu_f_open.GetFont()
        font.SetWeight(wx.BOLD)
        mnu_f_open.SetFont(font)
        mnu_file.AppendItem(mnu_f_open)
        self.Bind(wx.EVT_MENU, self.open_file, mnu_f_open)
        
        mnu_f_exit = mnu_file.Append(-1, "E&xit")
        self.Bind(wx.EVT_MENU, self.close_frame, mnu_f_exit)
        
        menubar.Append(mnu_file, "&File")
        
        # Activate Menubar
        self.SetMenuBar(menubar)
    
    
    def close_frame(self, event = None):
        
        self.Close()
    
    
    def open_file(self, event = None):
        
        print "Open file..."
    
    
    def new_file(self, event = None):
        
        print "New file..."


def main():
    """Testing"""
    
    app = wx.PySimpleApp()
    f = MyFrame()
    f.Center()
    f.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()
Da läuft etwas ziemlich schief. :-( Ich brauche es im Moment zwar nicht, aber so ein "Bug" stört mich.

lg
Gerold
:-)

Verfasst: Donnerstag 8. März 2007, 22:02
von gerold
Laut "wxPython in Action" Seite 317 haben wir in unserem Code nichts falsch gemacht. :K

Verfasst: Freitag 9. März 2007, 11:09
von HWK
Zur Information der Code mit der notdürftigen Anpassung, damit die Ausrichtung stimmt:

Code: Alles auswählen

# -*- coding: cp1252 -*-

import  wx

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Tests mit Menüs', size=(400, 200))
        self.CenterOnScreen()
        tc = wx.TextCtrl(self, -1, '''Probetext''', style=wx.TE_READONLY)
        menuBar = wx.MenuBar()
        menu = wx.Menu()
        item = wx.MenuItem(menu, 101, '&Merkur')
        item.SetFont(item.GetFont())
        menu.AppendItem(item) 
        menu.Append(102, '&Venus')
        item = wx.MenuItem(menu, 103, '&Erde')
        font = item.GetFont()
        font.SetWeight(wx.FONTWEIGHT_BOLD)
        item.SetFont(font)
        menu.AppendItem(item) 
        menu.AppendSeparator()
        menu.Append(104, '&Schließen') 
        menuBar.Append(menu, '&Planeten')
        self.SetMenuBar(menuBar)
        self.Bind(wx.EVT_MENU, self.menu101, id=101)
        self.Bind(wx.EVT_MENU, self.menu102, id=102)
        self.Bind(wx.EVT_MENU, self.menu103, id=103)
        self.Bind(wx.EVT_MENU, self.CloseWindow, id=104)

    def menu101(self, event):
        print 'Merkur'

    def menu102(self, event):
        print 'Venus'

    def menu103(self, event):
        print 'Erde'

    def CloseWindow(self, event):
        self.Close()

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()
MfG
HWK

Verfasst: Freitag 9. März 2007, 13:00
von sape
HWK, danke für dein Snippet dass das Problem "fixt". Ich denke auch das es ein Bug ist. Ich denke ein Bug-Report an die Programmierer zu schicken wäre nicht schlecht. (Mein Englisch ist aber zu schlecht).

lg

P.S.: *Abo*