Tkinter Cursors ( Mauszeiger)

Code-Stücke können hier veröffentlicht werden.
Antworten
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Hallo,
ich habe mal die Tkinter Mauszeiger zusammengefasst. :D

Code: Alles auswählen

#! /usr/bin/python
from Tkinter import *
hp=Tk()
button= [
	Button(hp, text='X_crusor', cursor='X_cursor'),
	Button(hp, text='based_arrow_down', cursor='based_arrow_down'),
	Button(hp, text='based_arrow_up', cursor='based_arrow_up'),
	Button(hp, text='boat', cursor='boat'),
	Button(hp, text='bogosity', cursor='bogosity'),
	Button(hp, text='bottom_left_corner', cursor='bottom_left_corner'),
	Button(hp, text='bottom_right_corner', cursor='bottom_right_corner'),
	Button(hp, text='bottom_side', cursor='bottom_side'),
	Button(hp, text='bottom_tee', cursor='bottom_tee'),
	Button(hp, text='box_spiral', cursor='box_spiral'),
	Button(hp, text='center_ptr', cursor='center_ptr'),	
	Button(hp, text='circle', cursor='circle'),
	Button(hp, text='clock', cursor='clock'), 	
	Button(hp, text='coffee_mug', cursor='coffee_mug'),
	Button(hp, text='cross', cursor='cross'),	
	Button(hp, text='dot', cursor='dot'),	
	Button(hp, text='dotbox', cursor='dotbox'),	
	Button(hp, text='double_arrow', cursor='double_arrow'),
	Button(hp, text='draft_larg', cursor='draft_large'),	
	Button(hp, text='draft_small', cursor='draft_small'),
	Button(hp, text='draped_box', cursor='draped_box'),	
	Button(hp, text='exchange', cursor='exchange'),
	Button(hp, text='fleur', cursor='fleur'),
	Button(hp, text='gobbler', cursor='gobbler'),
	Button(hp, text='gumby', cursor='gumby'),
	Button(hp, text='hand1', cursor='hand1'),
	Button(hp, text='hand2', cursor='hand2'),	
	Button(hp, text='heart', cursor='heart'),
	Button(hp, text='icon', cursor='icon'),	
	Button(hp, text='iron_corss', cursor='iron_cross'),
	Button(hp, text='left_ptr', cursor='left_ptr'),
	Button(hp, text='left_side', cursor='left_side'),
	Button(hp, text='left_tee', cursor='left_tee'),
	Button(hp, text='leftbutton', cursor='leftbutton'),
	Button(hp, text='ll_angle', cursor='ll_angle'),
	Button(hp, text='lr_angle', cursor='lr_angle'),
	Button(hp, text='man', cursor='man'),
	Button(hp, text='middlebutton', cursor='middlebutton'),
	Button(hp, text='mouse', cursor='mouse'),
	Button(hp, text='pencil', cursor='pencil'),
	Button(hp, text='pirate', cursor='pirate'),
	Button(hp, text='plus', cursor='plus'),
	Button(hp, text='question_arrow', cursor='question_arrow'),
	Button(hp, text='right_prt', cursor='right_ptr'),	
	Button(hp, text='right_side', cursor='right_side'),
	Button(hp, text='right_tee', cursor='right_tee'),
	Button(hp, text='rightbutton', cursor='rightbutton'),
	Button(hp, text='rtl_logo', cursor='rtl_logo'),
	Button(hp, text='sailboat', cursor='sailboat'),
	Button(hp, text='sb_down_arrow', cursor='sb_down_arrow'),
	Button(hp, text='sb_v_double_arrow', cursor='sb_v_double_arrow'),
	Button(hp, text='sb_h_double_arrow', cursor='sb_h_double_arrow'),
	Button(hp, text='sb_left_arrow', cursor='sb_left_arrow'),
	Button(hp, text='sb_right_arrow', cursor='sb_right_arrow'),
	Button(hp, text='shuttle', cursor='shuttle'),
	Button(hp, text='sizing', cursor='sizing'),
	Button(hp, text='sb_up_arrow', cursor='sb_up_arrow'),
	Button(hp, text='spider', cursor='spider'),
	Button(hp, text='spraycan', cursor='spraycan'),
	Button(hp, text='star', cursor='star'),
	Button(hp, text='target', cursor='target'),
	Button(hp, text='tcross', cursor='tcross'),
	Button(hp, text='top_left_arrow', cursor='top_left_arrow'),
	Button(hp, text='top_left_corner', cursor='top_left_corner'),
	Button(hp, text='top_right_corner', cursor='top_right_corner'),
	Button(hp, text='top_side', cursor='top_side'),
	Button(hp, text='top_tee', cursor='top_tee'),
	Button(hp, text='trek', cursor='trek'),
	Button(hp, text='ul_angle', cursor='ul_angle'),
	Button(hp, text='watch', cursor='watch'),
	Button(hp, text='xterm', cursor='xterm'),
	]
	
ro =1
co =0
for x in button:
	x.grid(row=ro, column=co,
	padx=2, pady=2,
	ipady=10, ipadx=10,sticky=EW)
	co +=1
	if co % 5==0:
		co =0
		ro +=1
			
hp.mainloop()
Wie man die Mauszeiger in seinem Programm einbauen kann, kann man leicht dem Codestück oben entnehmen.


Gruss
pyStyler :)
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

hi pyStyler!
Das is ja mal cool! Sind das echt alle? -Ich hab auch so ne liste, die is aber wesentlich kürzer. naja...ich find's toll!
Ach, nur so: Wie lang hast du dafür gebraucht?
Gruß jj :lol:
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

hi,
schlangenbeschwörer hat geschrieben: hi pyStyler!
Das is ja mal cool!
danke
schlangenbeschwörer hat geschrieben: Sind das echt alle?
das ist alles was ich hab abschreiben können. 8)
schlangenbeschwörer hat geschrieben: Ich hab auch so ne liste, die is aber wesentlich kürzer.
sind denn die in deiner Liste aufgeführten Cursors auch in den obigen Script dabei?
schlangenbeschwörer hat geschrieben: Ach, nur so: Wie lang hast du dafür gebraucht?
haha sehr witzig. :D
So gute 20 min sinds bestimmt gewesen

Gruss
pyStyler
:)
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Wie wäre es mit einem Eintrag ins [wiki=Tipps und Tricks]Wiki[/wiki]?
TUFKAB – the user formerly known as blackbird
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

hi,
blackbird hat geschrieben:Wie wäre es mit einem Eintrag ins [wiki=Tipps und Tricks]Wiki[/wiki]?
sorry für mein Unwissen was wiki angeht, aber unter welcher Unterrubrik
soll ich das Script eintragen ?

Ansonsten kannst du gerne den Eintrag für mich machen bitte. :D

Gruss
pyStyler
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Man könnte das Skript sicher mit einer for-Schleife und einer Liste kürzer lösen, daher würde ich es erst kürzen und dann Wikifizieren. Ich könnte es schon kürzen, nur testen müsste es jemand anders, da ich kein Tkinter habe und es auch nciht installieren werde/kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Hi,
Leonidas hat geschrieben:Man könnte das Skript sicher mit einer for-Schleife und einer Liste kürzer lösen, daher würde ich es erst kürzen und dann Wikifizieren. Ich könnte es schon kürzen, nur testen müsste es jemand anders, da ich kein Tkinter habe und es auch nciht installieren werde/kann.
kein Tkinter Installiert? :shock:
Nagut dann sorge du dafür das es gekuerzt wird und ich werde es dann testen.
Und den Eintrag machst du dann ?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pyStyler hat geschrieben:kein Tkinter Installiert? :shock:
Nein. So bleibe ich von der mittelalterlichen Tk-Bibliothek verschont.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Gut, ich habe meinen Codedegenerator laufen lassen und raus kam dann das:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import Tkinter as tk

cursors = [
    'X_cursor', 'based_arrow_down', 'based_arrow_up', 'boat',
    'bogosity', 'bottom_left_corner', 'bottom_right_corner',
    'bottom_side', 'bottom_tee', 'box_spiral', 'center_ptr',
    'circle', 'clock','coffee_mug', 'cross', 'dot','dotbox'
    'double_arrow', 'draft_large','draft_small', 'draped_box',
    'exchange', 'fleur', 'gobbler', 'gumby', 'hand1', 'hand2',
    'heart', 'icon', 'iron_cross', 'left_ptr', 'left_side',
    'left_tee', 'leftbutton', 'll_angle', 'lr_angle',
    'man', 'middlebutton', 'mouse', 'pencil', 'pirate',
    'plus', 'question_arrow', 'right_ptr', 'right_side',
    'right_tee', 'rightbutton', 'rtl_logo', 'sailboat',
    'sb_down_arrow', 'sb_v_double_arrow',
    'sb_h_double_arrow', 'sb_left_arrow',
    'sb_right_arrow', 'shuttle', 'sizing',
    'sb_up_arrow', 'spider', 'spraycan', 'star', 'target',
    'tcross', 'top_left_arrow',
    'top_left_corner', 'top_right_corner',
    'top_side', 'top_tee', 'trek', 'ul_angle', 'watch',
    'xterm'
]

def main():
    root = Tk()
    buttons = []
    for cursor in cursors:
        btn = tk.Button(root, text=cursor, cursor=cursor)
        buttons.append(btn)
    
    row = 1
    column = 0
    for widget in buttons:
        widget.grid(row=row, column=column, padx=2, pady=2, 
            ipady=10, ipadx=10,sticky=tk.EW)
        column += 1
        if column % 5 == 0:
            column = 0
            row += 1
    
    root.mainloop()

if __name__ == '__main__':
    main()
Nebenbei hat dies jetzt auch eine universelle Shebang, eine Encoding-Angabe, eine separate Anzeige-Funktion, einen Import-Hook und verständlichere Variablennamen. Sollte auch PEP8 konform sein.

Den Code testen darf jemand, der Tkinter installiert hat, testen. Der Wikieintrag sollte zumindest den Tag Codesnippets tragen, damit er auch wieder aufgefunden werden kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Ich hab mal ein paar kleinere Fehler in Leonida's Code ausgebessert, main gekürzt und die Buttons durch Labels ersetzt (platzsparender ;)).

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import Tkinter as tk

cursors = [
    'X_cursor', 'based_arrow_down', 'based_arrow_up', 'boat',
    'bogosity', 'bottom_left_corner', 'bottom_right_corner',
    'bottom_side', 'bottom_tee', 'box_spiral', 'center_ptr',
    'circle', 'clock','coffee_mug', 'cross', 'dot','dotbox',
    'double_arrow', 'draft_large','draft_small', 'draped_box',
    'exchange', 'fleur', 'gobbler', 'gumby', 'hand1', 'hand2',
    'heart', 'icon', 'iron_cross', 'left_ptr', 'left_side',
    'left_tee', 'leftbutton', 'll_angle', 'lr_angle',
    'man', 'middlebutton', 'mouse', 'pencil', 'pirate',
    'plus', 'question_arrow', 'right_ptr', 'right_side',
    'right_tee', 'rightbutton', 'rtl_logo', 'sailboat',
    'sb_down_arrow', 'sb_v_double_arrow',
    'sb_h_double_arrow', 'sb_left_arrow',
    'sb_right_arrow', 'shuttle', 'sizing',
    'sb_up_arrow', 'spider', 'spraycan', 'star', 'target',
    'tcross', 'top_left_arrow',
    'top_left_corner', 'top_right_corner',
    'top_side', 'top_tee', 'trek', 'ul_angle', 'watch',
    'xterm'
]

def main():
    root = tk.Tk()
    root.title("Tk cursors")
    row = 1
    column = 0
    for cursor in cursors:
        tk.Label(
            root, text=cursor, cursor=cursor, relief="groove"
            ).grid(row=row, column=column, ipadx=5, ipady=5, sticky=tk.EW)
        column += 1
        if column % 5 == 0:
            column = 0
            row += 1

    root.mainloop()

if __name__ == '__main__':
    main()
Gruß, mawe
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi, o.T.:
Leonidas hat geschrieben:Gut, ich habe meinen Codedegenerator laufen lassen und raus kam dann das:
Du hast einen Codegenerator für Python? Ist der irgendwo öffentlich und dokumentiert? (Würde nämlich gerne mal ein paar ausprobieren.)
Gruß,
Christian
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

CM hat geschrieben:
Leonidas hat geschrieben:Gut, ich habe meinen Codedegenerator laufen lassen und raus kam dann das:
Du hast einen Codegenerator für Python?
Nein, einen Codedegenerator: es degeneriert aus viel Code wenig Code. Aber es war eingentlich ein Witz, der Codedegenerator war ich selbst ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hmpf :oops: wer lesen kann ...
BlackJack

Leonidas hat geschrieben:Nein, einen Codedegenerator: es degeneriert aus viel Code wenig Code. Aber es war eingentlich ein Witz, der Codedegenerator war ich selbst ;)
Das beantwortet noch nicht die zweite Frage. Also: Bist Du irgendwo öffentlich und dokumentiert? ;-)
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

pyStyler hat geschrieben: sind denn die in deiner Liste aufgeführten Cursors auch in den obigen Script dabei?
Hi!
Ich hab noch ne andere liste gefunden, an die ich zunächst nicht gedacht hatte, und die is ähnlich lang, aber ein paar waren nicht drin, dafür 4 andere, die oben noch nicht erwähnt sind (glaub ich jedenfalls):

Code: Alles auswählen

['cross_reverse','crosshair','diamond_cross','umbrella']
Gruß jj
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Soweit ich es verstanden habe, werden die Cursor in der Datei cursorfont.h definiert. Warum also nicht diese Datei befragen? ;) (sie befindet sich bei Ubuntu in /usr/include/X11/. Bei anderen Linux-Distis weiss ich's nicht. Bei Windows ... ach wen interessierts :P):

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import Tkinter as tk


def main():
    f = file("/usr/include/X11/cursorfont.h", "r")
    root = tk.Tk()
    root.title("Tk cursors")
    row = 1
    column = 0
    for line in f:
        if line.startswith("#") and not "glyphs" in line:
            cursor = line.split()[1].replace("XC_", "")
            tk.Label(
                root, text=cursor, cursor=cursor, relief="groove"
                ).grid(row=row, column=column, ipadx=5, ipady=5, sticky=tk.EW)
            column += 1
            if column % 5 == 0:
                column = 0
                row += 1

    root.mainloop()

if __name__ == '__main__':
    main()
Gruß, mawe
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mawe hat geschrieben:Soweit ich es verstanden habe, werden die Cursor in der Datei cursorfont.h definiert. Warum also nicht diese Datei befragen? ;) (sie befindet sich bei Ubuntu in /usr/include/X11/.
Dort befindet sie sich aber nur wenn man das Paket libx11-dev installiert, das ist ein Wermutstropfen dieser Lösung. Für Gentoo ist das kein Problem, aber unter Debian-basierten Systemen habe ich meist wenige -dev Pakete installiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

mawe hat geschrieben: sie befindet sich bei Ubuntu in /usr/include/X11/
komisch bei mir nicht !
/usr/include/X11/bitmaps :roll:
calm
User
Beiträge: 8
Registriert: Sonntag 26. März 2017, 23:48

Hi,

den wichtigsten haste aber vergessen oder hab ich ihn irgendwo übersehen?

Code: Alles auswählen

Button(hp, text='none', cursor='none'),
:wink:

Danke für die Mühe…
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@calm: 2006 war noch Tk/Tcl 8.3/8.4 aktuell, da gab es "none" laut Dokumentation nur für Mac OS X. Erst mit 8.5 steht das in der Liste der allgemein verfügbaren Cursor.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten