Ich habe Tkinter mit Hilfe eines Python-Buches gelernt. Allerdings ist das Python-Buch für Python 2 geschrieben und ich benutze Python 3. Das hat mehrere Fehler erzeugt, und ich konnte sie bisher mit Hilfe anderer Fragen beheben. Es ist ein grundlegendes Programm, das ein Fenster mit Knöpfen zeigt, um 3 Spiele zu spielen oder das Fenster zu zerstören. Wenn eines der ersten beiden Spiele (Stein Papier Schere und Henker) geöffnet wird, sollen sie ein Toplevel() öffnen, das verschiedene Tasten hat, mit denen Sie das Spiel spielen können. Ich habe den Grafikcode für das dritte Spiel noch nicht geschrieben. Sie spielen jedoch nicht, wegen eines Fehlers: _tkinter.TclError: unbekannte Option "-padding" , die ich online keine Details gefunden habe. Ich verstehe, dass die unbekannte Option bedeutet, dass dieses Attribut/Schlüsselwort nicht in meiner Version von tkinter und Python 3 existiert. Die Fehlerzeilen sehen wie folgt aus: rpsFrame = Rahmen (rpsWindow, padding = '3 3 12 12', Breite = 300)Python 3 Fehler mit Tkinter: _tkinter.TclError: unbekannte Option "-padding"
Falls Sie es brauchen, sind der Fehler und der Code unten. (dieser Code nicht ausgeführt, ohne zusätzlichen Code) (wenn Sie diesen Code möchte ich werde es hinzufügen, aber ich möchte diese shortish halten)
Hier ist die vollständige Fehlerzurückverfolgungs:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
File "E:\Python\Python Book\Graphics\Hangman.py", line 149, in gui
hmFrame = Frame(hmWindow, padding = "3 3 12 12", width = 300)
File "C:\Python34\lib\tkinter\__init__.py", line 2582, in __init__
Widget.__init__(self, master, 'frame', cnf, {}, extra)
File "C:\Python34\lib\tkinter\__init__.py", line 2122, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: unknown option "-padding"
hier ist die Interface-Code:
from tkinter import *
import RockPaperScissors
import Hangman
import PokerDice
root = Tk()
root.title("Linux User & Developer's Mega Games Collection")
mainframe = Frame(root, height = 200, width = 500)
mainframe.pack_propagate(0)
mainframe.pack(padx = 5, pady = 5)
intro = Label(mainframe, text = """Welcome to Linux User & Developers Mega
Microgames Collection.
Select one of the following games to play:
""")
intro.pack(side = TOP)
rpsButton = Button(mainframe, text = "Rock, Paper, Scissors",
command = RockPaperScissors.gui)
rpsButton.pack()
hmButton = Button(mainframe, text = "Hangman", command = Hangman.gui)
hmButton.pack()
pdButton = Button(mainframe, text = "Poker Dice", command = PokerDice.start)
pdButton.pack()
exitButton = Button(mainframe, text = "Quit", command = root.destroy)
exitButton.pack(side = BOTTOM)
root.mainloop()
hier wird der Code von Rock, Paper Scissors:
from tkinter import *
import random
def gui():
rock = 1
paper = 2
scissors = 3
names = { rock: "Rock", paper: "Paper", scissors: "Scissors" }
rules = { rock: scissors, paper: rock, scissors: paper }
def start():
while game():
pass
def game():
player = playerChoice.get()
computer = random.randint(1, 3)
computerChoice.set(names[computer])
result(player, computer)
def result(player, computer):
newScore = 0
if player == computer:
resultSet.set("Tie game.")
elif rules[player] == computer:
result.set("Your victory has been assured.")
newScore = playerScore.get()
newScore += 1
playerScore.set(newScore)
else:
resultSet.set("The commputer laughs as you realise you have " +
"been defeated.")
newScore = computerScore.get()
newScore += 1
computerScore.set(newScore)
rpsWindow = Toplevel()
rpsWindow.title("Rock, Paper, Scissors")
playerChoice = IntVar()
computerChoice = StringVar()
resultSet = StringVar()
playerChoice.set(1)
playerScore = IntVar()
computerScore = IntVar()
**rpsFrame = Frame(rpsWindow, padding = '3 3 12 12', width = 300)**
#this is what is causing the error
rpsFrame.grid(column = 0, row = 0, sticky = (N, W, E, S))
rpsFrame.columnconfigure(0, weight = 1)
rpsFrame.rowconfigure(0, weight = 1)
Label(rpsFrame, text = 'Player').grid(column = 1, row = 1, sticky = W)
Radiobutton(rpsFrame, text = 'Rock', variable = playerChoice,
value = 1).grid(column = 1, row = 2, sticky = W)
Radiobutton(rpsFrame, text = 'Paper', variable = playerChoice,
value = 2).grid(column = 1, row = 2, sticky = W)
Radiobutton(rpsFrame, text = 'Scissors', variable = playerChoice,
value = 3).grid(column = 1, row = 2, sticky = W)
Label(rpsFrame, text = 'Computer').grid(column = 3, row = 3, sticky = W)
Label(rpsFrame, textvariable = computerChoice).grid(column = 1,
row = 3, sticky = W)
Button(rpsFrame, text = "Play", command = start).grid(column = 2, row = 2)
Label(rpsFrame, text = "Score").grid(column = 1, row = 5, sticky = W)
Label(rpsFrame, textvariable = playerScore).grid(column = 1,
row = 6, sticky = W)
Label(rpsFrame, text = "Score").grid(column = 1, row = 5, sticky = W)
Label(rpsFrame, textvariable = computerScore).grid(column = 3,
row = 6, sticky = W)
Label(rpsFrame, textvariable = resultSet).grid(column = 2, row = 7)
Hier ist der Henker Code:
from tkinter import *
import random
word = 0
wordLength = 0
clue = 0
def gui():
global word, wordLength, clue
dictionary = ["..."]
#I've omitted the words due to length
word = random.choice(dictionary)
wordLength = len(word)
clue = wordLength * ["_"]
tries = 6
def hangedman(hangman):
grphic = ["""..."""]
#I've omitted the ASCII graphics that go in the list due to length
graphicSet = graphic[hangman]
hmGraphic.set(graphicSet)
def game():
lettersWrong = incorrectGuess.get()
letter = guessLetter()
firstIndex = word.find(letter)
if firstIndex == -1:
lettersWrong += 1
incorrectGuesses.set(lettersWrong)
else:
for i in range(wordLength):
if letter ++ word[i]:
clue[i] = letter
hangedman(lettersWrong)
clueSet = " ".join(clue)
wordOutput.set(clueSet)
if lettersWrong == tries:
resultText = "Game Over. The word was " + word
resultSet.set(resultText)
newScore = computerScore.get()
newScore += 1
computerScore.set(newScore)
if "".join(clue) == word:
resultText = "You win! The word as " + word
def guessLetter():
letter = letterGuess.get()
letter = letter.strip()
letter = letter.lower()
return letter
def resetGame():
global word, wordLength, clue
incorrectGuesses.set(0)
hangedman(0)
resultSet.set("")
letterGuess.set("")
word = random.choice(dictionary)
wordLength = len(word)
clue = wordLength * ["_"]
newClue = " ".join(clue)
wordOutput.set(newClue)
hmWindow = Toplevel()
hmWindow.title("Hangman")
incorrectGuesses = IntVar()
incorrectGuesses.set(0)
playerScore = IntVar()
computerScore = IntVar()
resultSet = StringVar()
letterGuess = StringVar()
wordOutput = StringVar()
hmGraphic = StringVar()
**hmFrame = Frame(hmWindow, padding = "3 3 12 12", width = 300)**
#this is what is causing the error
hmFrame.grid(column = 0, row = 0, stick = (N, W, E, S))
hmFrame.columnconfigure(0, weight = 1)
hmFrame.rowconfigure(0, weight = 1)
Label(hmFrame, textvariable = hmGraphic).grid(column = 2, row = 1)
Label(hmFrame, text = "Word").grid(column = 2, row = 2)
Label(hmFrame, textvariable = wordOutput).grid(column = 2, row = 3)
Label(hmFrame, text = "Enter a letter").grid(column = 2, row = 4)
hmEntry = Entry(hmFrame, exportselection = 0,
textvariable = letterGuess).grid(column = 2, row = 5)
hmEntryButton = Button(hmFrame, text = "Guess",
command = game).grid(column = 2, row = 10)
Label(hmFrame, text = "Wins").grid(column = 1, row = 7, sticky = W)
Label(hmFrame, textvariable = playerScore).grid(column = 1, row = 8,
sticky = W)
Label(hmFrame, text = "Losses").grid(column = 3, row = 7, sticky = W)
Label(hmFrame, textvariable = computerScore).grid(column = 3, row = 8,
sticky = W)
Label(hmFrame, textvariable = resultSet).grid(column = 2, row = 9)
replayButton = Button(hmFrame, text = "Reset",
command = resetGame).grid(column = 2, row = 10)
Ja, es gibt keine solche "Auffüllen" -Option. Bitte beziehen Sie sich auf [hier] (http://effbot.org/tkinterbook/frame.htm) –
Um dieses Problem zu duplizieren, benötigen Sie nur drei Zeilen Code; Sie müssen nicht Ihr gesamtes Programm einschließen. –