Da stimme ich dir 100% zu.Ob du das nutzt, ist mir egal. Eigentlich ist mir auch egal, ob du Tk nutzt, ich muss damit ja nicht arbeiten. :K:
Danke für deine Antworten und Anregungen wünsche dir alles Gute Gruss wuf
Da stimme ich dir 100% zu.Ob du das nutzt, ist mir egal. Eigentlich ist mir auch egal, ob du Tk nutzt, ich muss damit ja nicht arbeiten. :K:
Nee, das wäre nix gewesen. Da hängen verschiedene selbstgestrickte Module drin, insgesamt ca. 2500 Zeilen Quelltext mit viel zu viel Overhead für diese Sache.wuf hat geschrieben:@pütone: Von mir aus kannst du deinen Code ohne weiter Konsmetik präsentieren. Ich mache keine Noten
Sorry da haben sich ein paar wüste Schreibfehler eingeschlichen Hi.wuf hat geschrieben:@pütone: Von mir aus kannst du deinen Code ohne weiter Konsmetik präsentieren. Ich mache keine Noten
Code: Alles auswählen
Submenu-Variante-1:
----------------------------
|Menu-Item-1 Ctrl-A |
|Menu-Item-2 Ctrl Shift-A |
|Menu-Item-3 F8 |
|.... |
|Menu-Item-x Shift-B |
----------------------------
Submenu-Variante-2:
----------------------------
|Menu-Item-1 Ctrl-A|
|Menu-Item-2 Ctrl Shift-A|
|Menu-Item-3 F8|
|.... |
|Menu-Item-x Shift-B|
----------------------------
Submenu-Variante-3:
----------------------------
|Menu-Item-1 Ctrl-A |
|Menu-Item-2 Ctrl Shift-A |
|Menu-Item-3 F8 |
|.... |
|Menu-Item-x Shift-B |
----------------------------
Weiß auch nicht, warum er hier im Subforum noch kein Hausverbot bekommen hat.numerix hat geschrieben:Du bist ja echt kein Freund von Tkinter ...lunar hat geschrieben:Es überrascht mich immer wieder, wie man selbst die schlechtesten Bibliotheken schön reden kann ...
Hi,numerix hat geschrieben:Die ausbleibenden Reaktionen deute ich mal als "Es gibt keine wirkliche Lösung."
Das wäre toll!Michael Schneider hat geschrieben:ich bin ziemlich sicher, dass ich vor ein paar Jahren etwas zu dem Thema in einem Buch gelesen habe. Werde mal recherchieren.
Jawolll!Michael Schneider hat geschrieben:ps. Tkinter ist klasse: simpel und (fast) überall verfügbar!
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Skriptname fws_menu_research_01.py 06.07.2008
# Menu-Darstellungsversuche
import Tkinter as tk
CANCEL16_data =\
'''
R0lGODlhEAAQAMZgAL43OsU0OMozNrY8P84yNc8y
Nss0N8w0N8s1OMw1ONMyNtQyNtIzN9MzN9cyNuM0
OOQ0OOM1OeQ1OM8+QuA4POs3O+s3POVESP87QP88
QP88Qv89QuJKTv8+Q+RKTuVKTuZKTf9AReBRVPtH
TPhJTfxITPxITfxKTtxbXvZQVORYXNVfYeNbXttl
aOxlaOBsb+5matxvcvJmaehucul0eP9tceV6fOp6
fvx0d+aAgvx3evh7fuWNj+eNkOiOkOaQkvKMj+aS
lOyQk+SYmvKTleyfoemho+qkpvWoquywse64uvC5
u++6vPHExvLJyvLJy/PMzPTOzv/Oz/7Q0fTV1vrY
2fba2vbd3vji4vjj5Pjk5fno6Prr7Prt7fvy8vzy
8v//////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/////////yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lN
UAAh+QQBCgB/ACwAAAAAEAAQAAAHuYB/goOEhYUM
DhAiKBILAoZ/DSBIWl5eXEsqBIcuVFifoFc2m4IF
H01WX1GrUalQLAGCC0JKXWBdSkpPYGBOQwqCFEZH
R1tgW0y8SSQYD4IcPD9BQVm8YEQpGhkVghczNDcy
O7xSG+YaFgN/ESPtOORg5R0hErImJzq8NRtSYFMl
JoD9EeABRhUwQGAoPAjEA4BBB17kKJKjYsUiLwwU
StCih4+PPnq0QAApwIQVMWKsmPAQEiF1hgIBADs=
'''
FILEOPEN16_data =\
'''
R0lGODlhEAAQAOe1AAALuwALvAAMuQASpgAQtQAS
qwASsAAWrgAVwAAYvAAZyAQftgAeyQAk0gcmyQgq
uA8prgAp2gQxvxUrtwMzwwYw2hYzqgg/yh06rgg8
5CFAshFKzyVHuBZL4zFIxBZP7StPvTlRuzFWxB1Z
6yFc0zhTzi9Y0SZd5zddyilj1zte2ihk8jpi0Cdn
9jxl0Dln0zBq8zlr20Fp0kBn4Vpju0Fr1Thw20Ru
1UZw2l1rwy59/ER83WhywEZ/3jyA+0iA3kmA4EiB
3kmB4Fp72DeG/kuD4EuD51h96EeE+U6E50+G4HJ6
xVKI5EyI+2+Cz0+O52CH4kaQ/liN6FWQ42SN4mGP
50uW/oKIzG6P3VeY+VmY/HSR3myW5mWZ816c/ImV
12Sk+WWk/m+j8nif84ag54aj6G+r/nar7puh24mo
6ICv842r64iu96Oo3aGq3aqqyn24/ZKy8Je26IW/
9Y+89Y+98ZW77LWyz7Wy1o/E+5fA/IXM/p/C8Lu4
2p/F96fC9b+917HF8cXD4MTD5KLV+Jva/M7K4cjO
86be/K/a/tHO5qne/rjY+M7Q8NHT7a/m/NvX7NzY
6bns/Lnt/tze99Dk+N7e9+Le8cjt/r/y/uPi+Obk
+9rr/Obm++vn8ujo++np++zp98j7/uzr/Mr8/sv9
/u7u/tX7/c/+/vHx+/Lx/vLy/vbz/OH+/vn2+/f3
/vv2/v34/vz8/v79/v7+/v//////////////////
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQB
CgD/ACwAAAAAEAAQAAAI7gD/CRxIsKBBgjyWHDR4
pRElGgRJSEliZIPANqBUjUJDUIgkRIXOOHEka1Wn
TZZyDFRC6pEdN6lovTL1SdOhLwOLiJIziJZPWrFg
bcEBhYWJB0BK1cESZ02aMmSGxMgSxcqJBT1QPaHy
xw8dNWK6hCGiY0SCAzsy2eBU6dQiOFp8tOjgAACB
fz/mVGlFKI+ZJjA+VGCAIICBf0Gm8Jm0B4wXJCsy
RGigQECBfymYMMKUSA+bMUdmqCjhYYLAC1xm0ZrF
KtQlSIoE9cETQiCFQD9pufIUyRCgO28gCJTw4kYN
GS5QiADBQQMGCwMEBgQAOw==
'''
def name_width(text):
"""Ermittelt die Breite und Höhe des Namens in Pixel"""
name_obj = dummy_canvas.create_text(
0,0,
text = text,
font = menu_font
)
x1,y1,x2,y2 = dummy_canvas.bbox(name_obj)
return ((x2-x1),y2)
root = tk.Tk()
root.geometry('500x250')
root.title('Canvas-Menu')
root['bg'] = 'steelblue2'
ICON_FILEOPEN = tk.PhotoImage(data=FILEOPEN16_data)
ICON_CANCEL = tk.PhotoImage(data=CANCEL16_data)
frame = tk.Frame(root,
)
frame.place(x=10,y=10)
dummy_canvas = tk.Canvas(frame,
)
dummy_canvas.pack()
menudata = {
"Datei":[
(None,"Neu","Strg+N","Control-n"),
(ICON_FILEOPEN,"Öffnen","Strg+O","Control-o"),
(None,"Speichern","Strg+S","Control-s"),
(None,"Speichern unter","Strg+Umschalt+S","Control-Shift-S"),
(ICON_CANCEL,"Beenden","","")]}
#~~ Geometrie
meun_start_gap = 5
menu_inter_gap = 20
menu_end_gap = 20
menu_icon_width = 20
menu_icon_height = menu_icon_width
#~~ Zeichensatz
menu_font = ('Helvetica','10','normal','roman')
text_height = 0
max_item_width = 0
max_shortcut_width = 0
for icon,item,shortcut1,shortcut2 in menudata['Datei']:
item_width,height = name_width(item)
if max_item_width < item_width:
max_item_width = item_width
shortcut_width,height = name_width(shortcut1)
if max_shortcut_width < shortcut_width:
max_shortcut_width = shortcut_width
text_height = height
if text_height < menu_icon_height:
menu_bar_height = menu_icon_height + 4
else:
menu_bar_height = text_height + 4
max_menu_bar_width = menu_icon_width + meun_start_gap + max_item_width +\
menu_inter_gap + max_shortcut_width + menu_end_gap
xpos_item = menu_icon_width + meun_start_gap
xpos_shortcut = xpos_item + max_item_width + menu_inter_gap +\
max_shortcut_width
dummy_canvas.destroy()
print menu_bar_height,text_height
for index,data in enumerate(menudata['Datei']):
icon,item,shortcut = data[0:3]
menu_bar = tk.Canvas(frame,
width = max_menu_bar_width,
height = menu_bar_height,
highlightthickness = 0
)
menu_bar.pack(side='top')
if icon:
menu_bar.create_image(
menu_icon_width/2,menu_bar_height/2,
image = icon,
anchor = 'center'
)
if item != "":
menu_bar.create_text(
xpos_item, float(menu_bar_height)/2.0,
text = item,
font = menu_font,
anchor = 'w'
)
if shortcut != "":
menu_bar.create_text(
xpos_shortcut, float(menu_bar_height)/2.0,
text = shortcut,
font = menu_font,
anchor = 'e',
)
root.mainloop()
Code: Alles auswählen
import Tkinter as tk
root = tk.Tk()
root.geometry("400x300+100+100")
file_menu_entries = ({"label":("oeffnen", "strg+o"),
"underline":0,
"command":None},
{"label":("speichern", "foo+s"),
"underline":0,
"command":None},
{"label":("beenden", "alt+b"),
"underline":0,
"command":root.destroy})
menubar = tk.Menu(root)
file_menu = tk.Menu(menubar, tearoff=False)
menubar.add_cascade(label="datei", menu=file_menu, underline=0)
for fme in file_menu_entries:
file_menu.add_command(label="%-10s %7s"%fme["label"],
command=fme["command"],
underline=fme["underline"])
root.config(menu=menubar)
root.mainloop()
Hi numerix,numerix hat geschrieben:Dein Code hilft da jetzt eigentlich gar nicht weiter. Da du keinen Font vorgibst, wird die Systemvoreinstellung verwendet. Bei mir ist das eine proportionale Schrift und es sieht eben dann nicht schön aus: Die Shortcuts flattern - sind weder rechts- noch linksbündig.
Tja, so sind eben die Geschmäcker verschieden.Michael Schneider hat geschrieben:Deine Einstellung, dass eine monospaced Type irgendwie altmodisch oder "wie Hund" aussieht, kann ich absolut nicht teilen. Ich würde jederzeit, zumindest für Menüs, eine nicht proportionale Schrift den Proportionalen vorziehen.
Das Buch hatte ich mir vermutlich ausgeliehen und ich komme frühestens Donnerstag wieder in die Bib.
Hab den mal geändert: http://paste.pocoo.org/show/95864/numerix hat geschrieben:Ich habe den Code jetzt fertig gemacht: http://paste.pocoo.org/show/78442/
Code: Alles auswählen
def help_dialog(self, event=None):
Hm. OK, wobei man das vielleicht geschickter bzw. automatisch lösen könnte... Man könnte vielleicht einfach z.B. .replace("Shift", "Umschalt") machen.numerix hat geschrieben:Die Trennung von shortcut und keycode war in meinem Fall erforderlich, weil die Menüeinträge deutschsprachig waren.
Hast du dir mal die "Mühe" gemacht, und den Code daraufhin untersucht? Offenbar nicht. Hättest du das getan, dann hättest du z.B. festgestellt, dass in dem von mir geposteten Code (http://paste.pocoo.org/show/78442/) nicht mehr zu tun ist, als Tkinter in tkinter umzubenennen und print mit Klammern auszustatten!Py-Prog hat geschrieben:Euere lösungen sind alle in Python 2.x geschrieben, gibt's da nichts neues in 3.1.1 oder in die richtung? Wenn's sein muss stell ich 2to3 in den Pastebin.
Ich weiß, aber schönlangsam wird das forum verwierend! Einerseits soll man seine Programme selber eintwickeln und nicht 'klauen' (was ich eigentlich auch lieber mache weil ich sonst nie sagen kann das Programm ist selbst entwickelt), und andererseits heißt es wozu das rad neu erfinden?, nur mal als beispiel. Und wegen dem nicht untersuchen, das hab ich absichtlich nicht gemacht weil das bisher immer nicht so einfach war.numerix hat geschrieben:Hast du dir mal die "Mühe" gemacht, und den Code daraufhin untersucht? Offenbar nicht. Hättest du das getan, dann hättest du z.B. festgestellt, dass in dem von mir geposteten Code (http://paste.pocoo.org/show/78442/) nicht mehr zu tun ist, als Tkinter in tkinter umzubenennen und print mit Klammern auszustatten!Py-Prog hat geschrieben:Euere lösungen sind alle in Python 2.x geschrieben, gibt's da nichts neues in 3.1.1 oder in die richtung? Wenn's sein muss stell ich 2to3 in den Pastebin.
Du lernst übrigens mehr, wenn du deine Programme nicht aus gesammelten Snippest zusammenflickst, sondern selbst mal was probierst.