【问题标题】:tkinter only works via functions?tkinter 只能通过函数工作?
【发布时间】:2019-05-10 16:14:28
【问题描述】:

我使用 PyCharm IDE 制作了一个井字游戏。我试图让它与 tkinter 一起运行,但我遇到了一些问题。

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

我的问题是如何创建一个序列,因为 tkinter 使用类和函数运行(至少我不知道其他东西)。例如:程序问“你想成为X还是O?”,在输入正确的输入后,程序应该问“你想成为第一还是第二?”。

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

【问题讨论】:

  • 不能在mainloop()之后放置函数。
  • (它在另一页上),我只是把它加到那里给你看。我在 mainloop 下没有功能

标签: python-3.x tkinter


【解决方案1】:

这里是固定代码:

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)

....
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

window.mainloop()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多