Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x tkinter仅通过函数工作?_Python 3.x_Tkinter - Fatal编程技术网

Python 3.x tkinter仅通过函数工作?

Python 3.x tkinter仅通过函数工作?,python-3.x,tkinter,Python 3.x,Tkinter,我用PyCharm IDE做了一个井字游戏。我试着让tkinter运行,但我遇到了一些问题 我的程序要求用户在X和O之间进行选择,以及X是先播放还是后播放。此外,如果你输入了不正确的答案,程序会告诉用户重新键入他/她的答案(带有while语句)。在tkinter上,我不能这样做,例如,当程序询问“您想要X还是O”,用户键入X,然后按下“确定”按钮时,它不会将该信息存储在任何地方。如果我尝试在while循环中输入一个,它将进入无限循环(因为它循环通过用户单击的第一个答案ok) 我的问题是,既然tk

我用PyCharm IDE做了一个井字游戏。我试着让tkinter运行,但我遇到了一些问题

我的程序要求用户在X和O之间进行选择,以及X是先播放还是后播放。此外,如果你输入了不正确的答案,程序会告诉用户重新键入他/她的答案(带有while语句)。在tkinter上,我不能这样做,例如,当程序询问“您想要X还是O”,用户键入X,然后按下“确定”按钮时,它不会将该信息存储在任何地方。如果我尝试在
while
循环中输入一个
,它将进入无限循环(因为它循环通过用户单击的第一个答案
ok

我的问题是,既然tkinter是用类和函数运行的(至少我不知道其他的东西),我怎么能创建一个序列呢。例如:程序询问“您想成为X还是O?”,将正确的输入输入到条目后,程序应询问“您想成为第一位还是第二位?”


以下是固定代码:

从tkinter导入*
def名称_选择(x):
#“打印”消息到标签
消息[“文本”]=玩家决定(x)[2]
#我如何在下面存储这些信息?所以我以后可以用
player_1=player_decision(x)[0]
player_2=player_decision(x)[1]
window=Tk()
....
消息=标签(窗口\框架1)
message.place(relwidth=0.5,relheight=1)
条目=条目(窗口\框架1)
entry.place(relx=0.55,relwidth=0.2,relheight=1)
button\u Ok=button(window\u frame1,text=“Ok”,command=lambda:name\u choose(entry.get())
按钮位置(relx=0.8,relwidth=0.2,relheight=1)
....
def玩家决定(玩家1):
player_2=“”
如果玩家_1.upper()=“X”:
message=“玩家1:X,玩家2:O”
player_2=“O”
游戏状态=1
elif player_1.upper()=“O”:
player_2=“X”
message=“玩家1:O,玩家2:X”
游戏状态=1
其他:
message=“重试输入”
游戏状态=0
返回玩家1、玩家2、消息、游戏状态
window.mainloop()

问题是因为在main循环之后定义了函数。确保在主循环开始之前运行所有代码。

以下是固定代码:

从tkinter导入*
def名称_选择(x):
#“打印”消息到标签
消息[“文本”]=玩家决定(x)[2]
#我如何在下面存储这些信息?所以我以后可以用
player_1=player_decision(x)[0]
player_2=player_decision(x)[1]
window=Tk()
....
消息=标签(窗口\框架1)
message.place(relwidth=0.5,relheight=1)
条目=条目(窗口\框架1)
entry.place(relx=0.55,relwidth=0.2,relheight=1)
button\u Ok=button(window\u frame1,text=“Ok”,command=lambda:name\u choose(entry.get())
按钮位置(relx=0.8,relwidth=0.2,relheight=1)
....
def玩家决定(玩家1):
player_2=“”
如果玩家_1.upper()=“X”:
message=“玩家1:X,玩家2:O”
player_2=“O”
游戏状态=1
elif player_1.upper()=“O”:
player_2=“X”
message=“玩家1:O,玩家2:X”
游戏状态=1
其他:
message=“重试输入”
游戏状态=0
返回玩家1、玩家2、消息、游戏状态
window.mainloop()

问题是因为在main循环之后定义了函数。确保在mainloop启动之前运行所有代码。

您不能将函数放在
mainloop()
之后(它在另一页上),我只是将它添加到那里以显示u。我没有mainloop下的函数您不能将函数放在
mainloop()
之后(它在另一页上),我只是将它添加到那里以显示u。我在mainloop下没有功能
from tkinter import *

def name_choose(x):
     # "print" message to Label
     message["text"] = player_decide(x)[2]
     # how do i store that info below ? so i can use it later
     player_1 =player_decide(x)[0]    
     player_2 =player_decide(x)[1]


window = Tk()
....
message = Label(window_frame1)
message.place(relwidth=0.5, relheight=1)

entry = Entry(window_frame1)
entry.place(relx=0.55, relwidth=0.2, relheight=1)

button_Ok = Button(window_frame1, text="Ok", command = lambda: name_choose(entry.get()) )
button_Ok.place(relx=0.8, relwidth=0.2, relheight=1)

....
window.mainloop()

def player_decide(player_1):
    player_2 = ""
    if player_1.upper() == "X":
        message = "Player 1 : X , Player 2 : O"
        player_2 = "O"
        game_status = 1
    elif player_1.upper() == "O":
        player_2 = "X"
        message = "Player 1 : O , Player 2 : X"
        game_status = 1
    else:
        message = "Retry Input"
        game_status = 0
    return player_1, player_2, message , game_status