wie gesagt, ich habe 5 Bücher gekauft.
In jedem davon steht ein bischen. Von bbbox steht nirgendwo
etwas.
Wenn es so eine Referenz auch auf Deutsch gäbe und mir
jemand sagen könnte, wo dieses zu finden ist, dann würde ich das tun !
Kai
verdammt, ich kapier es einfach nicht
im übrigen, ich habe gerade wuf´s Ideen bei mir eingebunden.
Das ganze sieht dann soooo aus :
Jetzt funktionieren auch die Scrollbalken GUT !!!
Es steht aber z.B nirgendwo in meinen Büchern so komplex, dass
ich bislang darauf gekommen wäre, dass hier auch die Reihenfolge
/ position im Code des "xscrollcommand" eine Rolle spielt.
@ numerix
Wie man einen Modellhubschrauber steuert, kann man auch nicht
aus Literatur lernen. Da zählt die Praxis und Übung.
Das ganze sieht dann soooo aus :
Code: Alles auswählen
import Tkinter as tk
from funktionen import *
# hier wird das Spielfenster erstellt
spiel = tk.Tk()
# hier wird der linke Container der Spielflaeche erstellt
container1=tk.Frame(master=spiel,bd=3,relief=tk.RAISED)
container1.pack(side=tk.LEFT,fill=tk.Y)
# hier wird der Container der Spielflaeche erstellt
container2=tk.Frame(container1,bd=3,relief=tk.SUNKEN)
container2.pack(side=tk.TOP,padx=5,pady=5)
# hier werden die Scrollbalken erstellt
schieber_x = tk.Scrollbar(container2,orient=tk.HORIZONTAL)
schieber_x.pack(side=tk.BOTTOM,fill=tk.X)
schieber_y = tk.Scrollbar(container2,orient=tk.VERTICAL)
schieber_y.pack(side=tk.RIGHT,fill=tk.Y)
# hier wird das Spieldfeld erstellt und in Container2 eingebunden
spielfeld = tk.Canvas(container2,bg="white",width=500,height=450)
spielfeld.pack()
spielfeld.config(xscrollcommand=schieber_x.set)
spielfeld.config(yscrollcommand=schieber_y.set)
erstelle_hexfeldobjekte ()
for x in hexdic.iterkeys() :
spielfeld.create_polygon (hexdic[x][0],fill=hexdic[x][2],outline="black")
# hier werden die Scrollbalken verknuepft
schieber_x.config(command=spielfeld.xview)
schieber_y.config(command=spielfeld.yview)
# hier wird ein Container fuer die Miniansicht erstellt
container3=tk.Frame(container1,bd=3,relief=tk.SUNKEN)
container3.pack(side=tk.LEFT,padx=20)
# hier wird die Miniansicht erstellt
miniansicht = tk.Canvas(container3,bg="white",bd=2,width=294,height=215)
berechne_minidic()
for x in minidic.iterkeys() :
miniansicht.create_polygon (minidic[x][0],outline="black",fill=minidic[x][1])
miniansicht.pack()
if spielfeld.bbox('all'):
#Das Spielfeld enthaelt Garfikobjekte. Passe den Ziehberiech der
#Scrollbalken auf den neuen Inhalt (Hexagons) des Spielfeldes an
x1, y1, x2, y2 = spielfeld.bbox('all')
spielfeld.configure(scrollregion=(x1, y1, x2+2, y2+2))
spiel.geometry("1024x768")
spiel.mainloop()
Es steht aber z.B nirgendwo in meinen Büchern so komplex, dass
ich bislang darauf gekommen wäre, dass hier auch die Reihenfolge
/ position im Code des "xscrollcommand" eine Rolle spielt.
@ numerix
Wie man einen Modellhubschrauber steuert, kann man auch nicht
aus Literatur lernen. Da zählt die Praxis und Übung.
imac
20 Zoll
2,4 ghz
20 Zoll
2,4 ghz
Aber zum Hubschrauber gibt's eine Anleitung, in der drinsteht, für was welcher Hebel da ist. Und in diese Kategorie fällt z.B. die Frage "Wofür ist bbox da".derkai hat geschrieben:@ numerix
Wie man einen Modellhubschrauber steuert, kann man auch nicht
aus Literatur lernen. Da zählt die Praxis und Übung.
Eine deutschsprachige Referenz zu Tkinter kenne ich nicht.
Wenn Michael Weigends "Objektorientiere Programmierung mit Python" dabei ist, dann hast du Glück: Da sind nämlich mehr als 100 Seiten über Tkinter drin. Soweit mir bekannt ist, gibt es kein anderes deutschsprachiges Buch, indem Tkinter so ausführlich behandelt wird.derkai hat geschrieben:wie gesagt, ich habe 5 Bücher gekauft.
Da taucht immerhin "bounding box" im Register auf und wird auf Seite 455 kurz erklärt. Unter den exemplarischen Canvas-Methoden auf der Seite davor ist bbox() aber dann leider nicht vertreten.
Also: bbox(tagOrID) liefert die vier Koordinaten der linken oberen und der rechten unteren Ecke des Items/Tags bzw. des das Item/Tag umgebenden Begrenzungskastens ("bounding box").
ja, der Michael ist dabei ...
und ich habe auch einmal Deinen Link verfolgt.
bbox und die Funktionsweise ist halbwegs klar.
es wird ein Tuple zurückgegeben mit Ecke links oben
und rechts unten
was heisst denn deutsch übersetzt
if spielfeld.bbox ("all") : ????
Was passiert da ?
Kai
und ich habe auch einmal Deinen Link verfolgt.
bbox und die Funktionsweise ist halbwegs klar.
es wird ein Tuple zurückgegeben mit Ecke links oben
und rechts unten
was heisst denn deutsch übersetzt
if spielfeld.bbox ("all") : ????
Was passiert da ?
Kai
imac
20 Zoll
2,4 ghz
20 Zoll
2,4 ghz
Da wird der Wahrheitswert des Rückgabewertes von ``spielfeld.bbox('all')`` überprüft und nur wenn der "wahr" ist, wird der Code in dem ``if``-Block ausgeführt.
So als Tipp: Überleg mal und probier dann mal aus, was die Methode liefert, wenn so ein Canvas leer ist, also die Ausmasse von *Nichts* berechnet werden müssten.
So als Tipp: Überleg mal und probier dann mal aus, was die Methode liefert, wenn so ein Canvas leer ist, also die Ausmasse von *Nichts* berechnet werden müssten.
Hallo derkai
Was heisst:
Die Methode 'bbox' gibt dir die Koordinaten x1/y1 und x2/y2 also die Eckpunkte eines Rechteckrahmens zurück, welcher alle ('all') grafischen Objekte (in unserem Falle sind dies vorläufig nur grafische Hexagon-Objekte) umfasst. Das heisst alle vorkommenden Grafik-Objekte befinden sich innerhalb dieses Rechteckrahmens. Mit den zurückgegebenen Koordinatenpunkte x1,y1......x2,y2 wird die Ziebereich der Scrollbalken neu justiert. Wenn du eine Spielfeld-Geometrie von 1000 mal 1000 Hexagons hast übersteigt dies die geometrischen Dimensione deines Bildschirmes (1024x768" um das mehrfache. Da du auf dem Bildschirm das Spielfeld nur mit der von dir vorgegebenen Geometrie von 500x450 (für das Canvas-Widget) als Auschnitt deines Spielfeldes siehst müssen die Scrollbalken nach einer neuen Platzierung aller Hexagons, neu kalibriert werden.
"all" ist eine Tkinter-Konstante und kann auch in deinem Code-Snippet auch als tk.ALL geschrieben werden.
Was heisst:
Code: Alles auswählen
spielfeld.bbox("all")
"all" ist eine Tkinter-Konstante und kann auch in deinem Code-Snippet auch als tk.ALL geschrieben werden.
Take it easy Mates!
Hallo derkai
Anwort zu diener ersten Frage. Die folgenden Anweisungen:
können natürlich auch so geschrieben werden:
Ok Gruss wuf
Anwort zu diener ersten Frage. Die folgenden Anweisungen:
Code: Alles auswählen
# Binde die vertikale & horizontale Ziehleisten an die Canvas-Flaeche
spielfeld['xscrollcommand'] = schieber_x.set
spielfeld['yscrollcommand'] = schieber_y.set
schieber_x['command'] = spielfeld.xview
schieber_y['command'] = spielfeld.yview
Code: Alles auswählen
spielfeld.config(xscrollcommand = schieber_x.set)
spielfeld.config(yscrollcommand = schieber_y.set)
schieber_x.config(command=spielfeld.xview)
schieber_y.config(command=spielfeld.yview)
Take it easy Mates!
Hallo numerix
Bei mir leistet:
folgende Meldung:
Bei mir leistet:
Code: Alles auswählen
spielfeld.bbox()
Gruss wufTraceback (most recent call last):
File "frame_test_02_01.py", line 67, in <module>
x1, y1, x2, y2 = spielfeld.bbox()
File "/usr/local/lib/python2.5/lib-tk/Tkinter.py", line 2104, in bbox
self.tk.call((self._w, 'bbox') + args)) or None
_tkinter.TclError: wrong # args: should be ".1076538764.1076539244.1076555916.1076555980agOrId ?tagOrId ...?"
Take it easy Mates!
Hallo derkai
Du kanst folgendes:
auch so schreiben:
Gruss wuf
Du kanst folgendes:
Code: Alles auswählen
if spielfeld.bbox('all'):
# Das Spielfeld enthaelt Garfikobjekte. Passe den Ziehbereich der
# Scrollbalken auf den neuen Inhalt (Hexagons) des Spielfeldes an
x1, y1, x2, y2 = spielfeld.bbox('all')
spielfeld.configure(scrollregion=(x1, y1, x2, y2))
Code: Alles auswählen
if spielfeld.bbox(tk.ALL):
# Das Spielfeld enthaelt Garfikobjekte. Passe den Ziehbereich der
# Scrollbalken auf den neuen Inhalt (Hexagons) des Spielfeldes an
bounding_box = spielfeld.bbox(tk.ALL)
spielfeld.configure(scrollregion=bounding_box)
Take it easy Mates!
Das ist interessant. Denn die - tatsächlich nicht funktionierende - Variante ohne Parameter findet man sowohl hier
http://effbot.org/tkinterbook/canvas.htm
als auch hier
http://infohost.nmt.edu/tcc/help/pubs/t ... thods.html
Woher hast du denn deine - funktionierende - Variante mit dem "all"?
http://effbot.org/tkinterbook/canvas.htm
als auch hier
http://infohost.nmt.edu/tcc/help/pubs/t ... thods.html
Woher hast du denn deine - funktionierende - Variante mit dem "all"?
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Leute, vergesst nicht dass die Standardlib hauptsächlich in Form von .py-Dateien vorliegt...numerix hat geschrieben: Woher hast du denn deine - funktionierende - Variante mit dem "all"?
Ja, stimmt schon. Vielleicht geht ihr "Profis" da auch anders ran. Ich lese lieber zunächst mal Dokumentation und nur wenn ich da nicht weiterkomme, wage ich mich an die Module selbst heran.birkenfeld hat geschrieben:Leute, vergesst nicht dass die Standardlib hauptsächlich in Form von .py-Dateien vorliegt...
In diesem Fall ist es ja so, dass die inoffiziellen Tkinter-Referenzen übereinstimmend etwas beschreiben, was offenbar so nicht stimmt. Dass etwas nicht stimmt, merkt man aber erst, wenn man es braucht und bisher habe ich noch nie bbox() auf ein ganzes Canvas anwenden müssen.
Hallo derkai
Habe eine Frage zur Spielkarten-Erstellung (Map). Wie werden die grafischen Terrain-Symbole den einzelne Hexagonfeldern zugeordnet (z.B. 'Gras', 'leichtes Waldgebiet', 'Wüste' usw.). Wird dies zufällig geschehen (mit einem Random-Generator) oder wird die Karte mittels einem hierfür programmierten Editor (natürlich in Tkinter & Python) erfolgen?
Gruss wuf
Habe eine Frage zur Spielkarten-Erstellung (Map). Wie werden die grafischen Terrain-Symbole den einzelne Hexagonfeldern zugeordnet (z.B. 'Gras', 'leichtes Waldgebiet', 'Wüste' usw.). Wird dies zufällig geschehen (mit einem Random-Generator) oder wird die Karte mittels einem hierfür programmierten Editor (natürlich in Tkinter & Python) erfolgen?
Gruss wuf
Take it easy Mates!
sorry, dass ich mich erst jetzt wieder melde -
ich hatte ein wenig wenig Zeit.
Bislang waren die Felder zufällig entstanden, allerdings
hatte auch ich schon die Idee, dass man dies ja sogar besser
in Form eines Editors machen könnte.
Ich werde aber zunächst noch versuchen den bisher geschriebenen
Code in die GUI mit einzubinden - rein um wieder etwas zu üben.
Dies betrifft vor allem die Bewegung eines "Bild - Panzers" (oder besser
gesagt von 6 Bild Panzern - für jede Ausrichtung einen) in das Spielfeld
mit ein zu beziehen.
Wenn mir das gelungen ist, dann könnte ich den "linken" Teil der GUI
weiter verwenden und auf dem rechten entsprechende Fenster schaffen,
die die Eigemschaften eines Feldes verändern können.
So als Zufallsprinzip machen die nicht unbedingt immer Sinn.
Weit aus schwieriger wird es allerdings, dass Endziel der Karte
zu verwirklichen. Es soll verschiedne Höehen Level geben.
Dafür muss aber später seitens der Logik eine Entscheidung getroffen
werden, ob die "Gegner" sich überhaupt sehen können.
Kai
ich hatte ein wenig wenig Zeit.
Bislang waren die Felder zufällig entstanden, allerdings
hatte auch ich schon die Idee, dass man dies ja sogar besser
in Form eines Editors machen könnte.
Ich werde aber zunächst noch versuchen den bisher geschriebenen
Code in die GUI mit einzubinden - rein um wieder etwas zu üben.
Dies betrifft vor allem die Bewegung eines "Bild - Panzers" (oder besser
gesagt von 6 Bild Panzern - für jede Ausrichtung einen) in das Spielfeld
mit ein zu beziehen.
Wenn mir das gelungen ist, dann könnte ich den "linken" Teil der GUI
weiter verwenden und auf dem rechten entsprechende Fenster schaffen,
die die Eigemschaften eines Feldes verändern können.
So als Zufallsprinzip machen die nicht unbedingt immer Sinn.
Weit aus schwieriger wird es allerdings, dass Endziel der Karte
zu verwirklichen. Es soll verschiedne Höehen Level geben.
Dafür muss aber später seitens der Logik eine Entscheidung getroffen
werden, ob die "Gegner" sich überhaupt sehen können.
Kai
imac
20 Zoll
2,4 ghz
20 Zoll
2,4 ghz
bisher lief es so :
Code: Alles auswählen
# -*- coding: utf-8 -*-
""" Modul zur Berechnung von Hexfeldobjekten"""
from math import sqrt, hypot
from random import choice
laenge = 25.0
spielreihen = 57
ungerade_spalten = 19
gerade_spalten = ungerade_spalten - 1
farbe = ("#F6C783",)*15+ ("#18C85A","#A0A6F5")
# braun gruen blau
hexdic = {} # Dictionary (x,y) : x1,y1 ... x6,y6
nachbardic = {} # Dictionary Nachbarfelder
minidic = {} # Dictionary Miniansicht
""" Funktion zur Berechnung der X,Y Koordinaten """
def berechne_felder (xpos, ypos) :
x1 = xpos
y1 = ypos
x2 = x1 + laenge
y2 = y1
x3 = x2 + (laenge/2.0)
y3 = y2 + ((laenge * sqrt(3.0)/2.0))
x4 = x2
y4 = (sqrt(3.0) * laenge) + y2
x5 = x1
y5 = y4
x6 = x1 - (laenge / 2.0)
y6 = y3
mittex = round((x1 + laenge /2.0),2)
mittey = round ((y3),2)
mitte = (mittex, mittey)
level = choice(farbe)
return (x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6),mitte,level
imac
20 Zoll
2,4 ghz
20 Zoll
2,4 ghz