Tkinter Button Events

Fragen zu Tkinter.
Moon
User
Beiträge: 37
Registriert: Mittwoch 20. Dezember 2017, 15:21

Tkinter Button Events

Beitragvon Moon » Montag 22. Januar 2018, 12:20

Hey zusammen,

ich baue grad für mein Spiel eine grafische Oberfläche. Nun habe ich bis jetzt soweit die grafische Oberfläche fast fertig.
Mein Ziel ist es, wenn der User auf einen Button klickt, dass dieser eine Hintergrundfarbe erhält und wenn der PC eine Nummer wählt, dass dann der passende Button des Computers auch eine Hintergrundfarbe bekommt.

Ich habe auch schon viel gegoogelt. Stehe nun aber vor einem Problem. Wie will ich der Funktion einen Parameter übergeben, wenn ich sie aber erst nach dem click auf dem Button ausführen möchte ?

Mein Script:
  1. import tkinter as tk
  2.  
  3. def changeColor(button):
  4.     button.configure(background='beige')
  5.  
  6.  
  7. def startGame():
  8.     root.destroy()
  9.     game = tk.Tk()
  10.  
  11.     sizeX = 500
  12.     sizeY = 350
  13.     game.geometry("{}x{}".format(sizeX, sizeY))
  14.  
  15.     game.title("Shear Stone Paper")
  16.  
  17.     roundNumber = 1
  18.     playerName = "Hans"
  19.  
  20.     rounds = tk.Label(game, text="Round {}".format(roundNumber))
  21.     player = tk.Label(game, text="{}".format(playerName))
  22.     computer = tk.Label(game, text="Computer")
  23.  
  24.     # Shear Stone Paper (Auswahlmöglichkeiten)
  25.     shearButton = tk.Button(game, text="Shear")
  26.     stoneButton = tk.Button(game, text="Stone")
  27.     paperButton = tk.Button(game, text="Paper")
  28.  
  29.     shearButton.bind('<Button-1>', changeColor) # <--- hier
  30.  
  31.     shearButton2 = tk.Button(game, text="Shear", state=tk.DISABLED)
  32.     stoneButton2 = tk.Button(game, text="Stone", state=tk.DISABLED)
  33.     paperButton2 = tk.Button(game, text="Paper", state=tk.DISABLED)
  34.  
  35.     rounds.place(x = 250, y = 0)
  36.     player.place(x = 65, y = 20)
  37.     computer.place(x = 390, y = 20)
  38.  
  39.     shearButton.place(x = 60, y = 60)
  40.     shearButton2.place(x = 400, y = 60)
  41.  
  42.     stoneButton.place(x = 60, y = 100)
  43.     stoneButton2.place(x = 400, y = 100)
  44.  
  45.     paperButton.place(x = 60, y = 140)
  46.     paperButton2.place(x = 400, y = 140)
  47.    
  48.     game.mainloop()
  49.  
  50. sizeX = 500
  51. sizeY = 150
  52. # erzeugt das Root-Widget, dies liefert die Titelleiste und die Dekoration
  53. root = tk.Tk()
  54. root.geometry("{}x{}".format(sizeX, sizeY))
  55. # title setzen
  56. root.title("Shear Stone Paper")
  57. # erzeugt ein Label
  58. header = tk.Label(root, text="Game: Shear Stone Paper")
  59.  
  60. header.pack()
  61.  
  62. frame = tk.Frame(root)
  63. frame.pack()
  64.  
  65. buttonStart = tk.Button(frame, text="Start Game", command=startGame)
  66. buttonStart.pack(side=tk.LEFT, padx=5, pady=5)
  67. buttonQuit = tk.Button(frame, text="Quit Game", command=root.quit)
  68. buttonQuit.pack(side=tk.LEFT, padx=5, pady=5)
  69.  
  70. descriptionHeader = tk.Label(root, text="Gamedescription:")
  71. description = tk.Label(root, text="This is the classic Game of Shear Stone Paper.\n You are playing against the Computer.\n The Target is to get 3 Points and win this Game.")
  72.  
  73. descriptionHeader.pack()
  74. description.pack(side=tk.TOP)
  75.  
  76.  
  77. # Fenster bleibt solange offen bis das Fenster geschlossen wird.
  78. root.mainloop()


Hoffe ihr könnt mir helfen.

Moon
Sirius3
User
Beiträge: 7044
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Tkinter Button Events

Beitragvon Sirius3 » Montag 22. Januar 2018, 13:26

@Moon: suchst Du `functools.partial`? Schere heißt auf englisch "scissors".
Moon
User
Beiträge: 37
Registriert: Mittwoch 20. Dezember 2017, 15:21

Re: Tkinter Button Events

Beitragvon Moon » Dienstag 23. Januar 2018, 09:32

Hey,

vielen Dank. Dies war die function die ich gesucht habe. Hatte ein paar Probleme beim einbauen aber konnte diese dann doch durch googlen lösen.
Im Wörterbuch stand für Schere auch Shear drin. Da es einfach geklingt hat habe ich es einfach genommen.

So habe ich es nun umgesetzt:
  1. from functools import partial
  2.  
  3. def changeColor(callable, button):
  4.     button.configure(background='beige')
  5.  
  6. colorChange = partial(changeColor, button=ScissorsButton)
  7. ScissorsButton.bind("<Button-1>", colorChange)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder