Bei mehr als einem Pane hat man einen Sash - bei noch mehr Panes mehrere. Den kann man mit der Maus ziehen.
Würde beim GUI Designer mit der Maus ziehen reichen? Das geht ja sowieso. Oder braucht man auch pixelgenaue Eingaben?
Dann müsste ich dafür etwas implementieren, etwa eine Liste mit x,y Koordinaten, die sich bei Sash Bewegung aktualisiert.
Bzw. dass die Position der Sashes sich nach der Eingabe verändert.
Braucht man das?
PanedWindow und Sash
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
Eine Frage: wie binde ich ein Maus Event an einen PanedWindow Sash. Ich hätte gerne so etwas wie <B1-Motion>. Wenn der Sash bewegt wird, möchte ich die Koordinaten wissen.
Hi Alfons
Kannst du das folgende Snippet einmal anschauen?:
Gruss wuf
Kannst du das folgende Snippet einmal anschauen?:
Code: Alles auswählen
#!/usr/bin/env python
# coding: UTF-8
import os
try:
import tkinter as tk
except ImportError:
import Tkinter as tk
def paned_win_event(event):
widget = event.widget
xpos = event.x
ypos = event.y
identify_data = event.widget.identify(xpos, ypos)
try:
index = identify_data[0]
tag = identify_data[1]
except IndexError:
return
print("Tag:{}, Index:{}, Coords:{}".format(
tag, index, widget.sash_coord(index)))
app_win = tk.Tk()
app_win.title("PanedWindow")
app_win.geometry('300x200+100+100')
panes = tk.PanedWindow(app_win, orient='horizontal', showhandle=1, handlepad=1,
handlesize=8, sashwidth=2, opaqueresize=1, sashrelief='sunken')
panes.pack(fill="both", expand="yes")
panes.bind('<Button1-Motion>', paned_win_event)
left = tk.Label(panes, text="Left Pane")
left.pack()
center = tk.Label(panes, text="Center Pane")
center.pack()
right = tk.Label(panes, text="Right Pane")
right.pack()
panes.add(left)
panes.add(center)
panes.add(right)
app_win.mainloop()
Take it easy Mates!
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
@wuf Danke, das ist eine saubere Lösung, die haargenau passt. Wollte es gestern abend noch mit after und Sashlistenvergleich machen, aber das wäre aufwändig geworden. Und so ist es dann einfach.
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
@wuf Ist irgendwo spezifiziert, welche Werte identify zurückliefert für verschiedene Objekte? Hab mal hier einfach 'sash' eingefügt:Kann aber in dieser Doku nur finden:
Code: Alles auswählen
def paned_win_event(event):
widget = event.widget
xpos = event.x
ypos = event.y
identify_data = event.widget.identify(xpos, ypos)
try:
index = identify_data[0]
tag = identify_data[1]
if tag != 'sash': return
except IndexError:
return
Quelle: http://effbot.org/tkinterbook/panedwind ... ify-methodidentify(x, y) [#]
Identifies the widget element at the given position.
@Alfons Mittelmeyer: Die Tk-Dokumantation sagt 'sash' und 'handle': http://www.tcl.tk/man/tcl8.4/TkCmd/panedwindow.htm#M22
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
@BlackJack Danke, jetzt muss und kann ich diese Zeile wieder entfernen:Denn wenn man am Handle zieht, bekomme ich dann kein Sash Koordinaten Update.
Dann muss ich noch die Save Routine dafür machen und dabei die Reihenfolge der add Kommandos berücksichtigen. before und after habe ich allerdings nicht realisiert, die Reihenfolge kann man ja mit remove und add ändern.
Ach so, was ist mit diesem proxy?. Ist das interessant für das Layout oder nur für die Programmierung?
Code: Alles auswählen
if tag != 'sash': return
Dann muss ich noch die Save Routine dafür machen und dabei die Reihenfolge der add Kommandos berücksichtigen. before und after habe ich allerdings nicht realisiert, die Reihenfolge kann man ja mit remove und add ändern.
Ach so, was ist mit diesem proxy?. Ist das interessant für das Layout oder nur für die Programmierung?