Bedeutug

Fragen zu Tkinter.
Antworten
DavidS
User
Beiträge: 1
Registriert: Mittwoch 7. März 2018, 15:18

Hallo ,
wir haben in der Schule heute ein TicTactoe spiel programmiert
bei der Aufgabe die Linien für das Feld zu bestimmen bin ich gescheitert.
Mir wurde dann geholfen,aber nicht erklärt was das für Werte in den Klammern sind.
Könnte mir jmd beschreiben was diese Werte für eine Bedeutung haben?


self.spielfeld.create_line(100,0,100,300,fill="black")
self.spielfeld.create_line(200,0,200,300,fill="black")
self.spielfeld.create_line(0,100,300,100,fill="black")
self.spielfeld.create_line(0,200,300,200,fill="black")
self.spielfeld.create_line(0,300,300,300,fill="black")
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi DavidS

Willkommen in unserem Forum. Das sind Linien die mit den zugehörigen Koordinatenpunkt auf eine Canvas gezeichnet werden.
Hier das ausführbare Skript:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk


class Spielfeld:
    
    def __init__(self, app_win):
    
        self.spielfeld = tk.Canvas(app_win)
        self.spielfeld.pack(fill='both', expand=True)
        
        # Zeichne Linien mit den zugehörigen Koordinatenpunkte x0, y0, x1, y1
        # Zeichne Line = create_line(x0, y0, x1, y1, fill="Farbe")
        self.spielfeld.create_line(100,0,100,300,fill="black")
        self.spielfeld.create_line(200,0,200,300,fill="black")
        self.spielfeld.create_line(0,100,300,100,fill="black")
        self.spielfeld.create_line(0,200,300,200,fill="black")
        self.spielfeld.create_line(0,300,300,300,fill="black")

        
app_win = tk.Tk()
app_win.title('Tic Tac Toe')
app_win.geometry('300x300')
spielfeld = Spielfeld(app_win)
app_win.mainloop()
Gruss wuf :wink:
Take it easy Mates!
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@wuf: die Klasse `Spielfeld` ist jetzt nicht wirklich nötig. Entweder ist ein Spielfeld ein Canvas, dann brauchst Du Vererbung, oder Du hast einfach nur eine Funktion, um ein Spielfeld zu erzeugen. Statt die Größe des Fensters vorzugeben und zu hoffen, dass das Canvas dieses ausfüllt und dann die richtige Größe hat, solltest Du die Größe des Canvas vorgeben und die Fenstergröße automatisch entsprechend des Inhaltes bestimmen lassen. Das Packen findet immer auf der übergeordneten Ebene statt.

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk

def create_game_board(frame):
    board = tk.Canvas(frame, width=300, height=300)

    # Zeichne Linien mit den zugehörigen Koordinatenpunkte x0, y0, x1, y1
    # Zeichne Line = create_line(x0, y0, x1, y1, fill="Farbe")
    board.create_line(100,0,100,300,fill="black")
    board.create_line(200,0,200,300,fill="black")
    board.create_line(0,100,300,100,fill="black")
    board.create_line(0,200,300,200,fill="black")
    return board

def main():
    app_win = tk.Tk()
    app_win.title('Tic Tac Toe')
    board = create_game_board(app_win)
    board.pack()
    app_win.mainloop()

if __name__ == '__main__':
    main()
@DavidS: der letzte Strich scheint mir überflüssig.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Sirius3

Danke für deinen Hinweis. Wusste schon dass es noch einfacher zu lösen wäre. Da die von DavidS gezeigten Zeilen mit einem self. beginnen nahm ich an er verendet für seine Aufgabe ein Klasse.

Gruss wuf :wink:
Take it easy Mates!
Antworten