if语句有问题

时间:2019-05-20 08:26:18

标签: python tkinter

使用我输入的if语句,即使它是正确的,它也只会显示loss语句。

我不确定声明的编写方式是否正确。

我试图使当按下开始时两个标签都显示一个介于1到21之间的数字。

此外,如果可能的话,我想确保在按下点击按钮时,可以在标签上添加一个数字。例如,按hit将增加10 + 5,然后显示总数。

位于班级TTY:

import tkinter as tk

k = 10
Q = 10
J = 10
A = 11 or 1

class WINDOW(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        tk.Tk.wm_title(self, "Memory") #sets the window title

        container = tk.Frame(self)#Name of frame to refer to
        container.pack(side="top", fill="both", expand=True)#size of window
        container.grid_rowconfigure(0, weight=4)#size of window
        container.grid_columnconfigure(0, weight=4)

        self.frames = {}
        for F in (MainMenu, tty): 
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            self.frames[page_name] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame("MainMenu") 

    def show_frame(self, page_name):
        frame = self.frames[page_name]
        frame.tkraise()

class MainMenu(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        self.configure(background = 'white')

        label = tk.Label(self, text="Memory",font=(15),
                            borderwidth=5, relief="solid")
        label.pack(side="top", fill="y", pady=15, padx=270)
        label.pack(fill="both")

        button1 = tk.Button(self, text="Start", relief="solid",
                            borderwidth=5,width=30,
                            font=(17),command=lambda: 
                                controller.show_frame("tty"))
        button1.pack()

        button3 = tk.Button(self, 
        text="Quit",relief="solid",borderwidth=4,width=30,font=(17),command = quit)
        button3.place(x="420", y ="50")
        button3.pack()

class tty(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        self.configure(background = "white")

    def win():
        if score > deal:
            tts = tk.Label(self, text="win", font=(20))
            tts.pack()
        else:
            lose = tk.Label(self, text="lose", font=(10))
            lose.pack() #The if statement

    deal = tk.Label(self, text="18", font=(18))
    deal.pack(side="top", fill="y", pady=15, padx=270)

    score = tk.Label(self, text="19", font=(18))
    score.pack()

    f = tk.Frame(self)
    button1 = tk.Button(f,borderwidth=5, text="stand", font=(18),command = 
    lambda: win())#This is the button that i want to display the label
    button1.grid(row=0,column=0) 

    button2 = tk.Button(f, text="Hit",borderwidth=5, font=(18))
    button2.grid(row=0,column=1)
    f.pack(side="bottom")

    button3 = tk.Button(self, text="Quit", font=(18))
    button3.pack(side="right", pady=50)

if __name__ == "__main__":
    app = WINDOW()
    app.geometry("800x400")

    app.mainloop()

1 个答案:

答案 0 :(得分:1)

if score > deal:正在比较两个tkinter标签对象,而不是得分和交易的值。进行比较之前,请尝试获取标签的值并将其转换为整数。

if int(score['text']) > int(deal['text']):

帮助您解决其他问题。 要选择1到21之间的随机数,请使用python的random模块中包含的randint函数(请参见下面的代码)。我添加了一个新的randomise函数,该函数将在创建页面后被调用,以随机选择交易和得分的值。

使用hit按钮,我添加了一个新功能hit,它将采用当前得分,并向其中添加另一个随机值。

import tkinter as tk
from random import randint

k = 10
Q = 10
J = 10
A = 11 or 1

class WINDOW(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        tk.Tk.wm_title(self, "Memory") #sets the window title

        container = tk.Frame(self)#Name of frame to refer to
        container.pack(side="top", fill="both", expand=True)#size of window
        container.grid_rowconfigure(0, weight=4)#size of window
        container.grid_columnconfigure(0, weight=4)

        self.frames = {}
        for F in (MainMenu, tty): 
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            self.frames[page_name] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame("MainMenu") 

    def show_frame(self, page_name):
        frame = self.frames[page_name]
        frame.tkraise()

class MainMenu(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        self.configure(background = 'white')

        label = tk.Label(self, text="Memory",font=(15),
                            borderwidth=5, relief="solid")
        label.pack(side="top", fill="y", pady=15, padx=270)
        label.pack(fill="both")

        button1 = tk.Button(self, text="Start", relief="solid",
                            borderwidth=5,width=30,
                            font=(17),command=lambda: 
                                controller.show_frame("tty"))
        button1.pack()

        button3 = tk.Button(self, 
        text="Quit",relief="solid",borderwidth=4,width=30,font=(17),command = quit)
        button3.place(x="420", y ="50")
        button3.pack()

class tty(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        self.configure(background = "white")



        self.deal = tk.Label(self, text="18", font=(18))
        self.deal.pack(side="top", fill="y", pady=15, padx=270)

        self.score = tk.Label(self, text="19", font=(18))
        self.score.pack()

        f = tk.Frame(self)
        button1 = tk.Button(f,borderwidth=5, text="stand", font=(18),command = self.win)#This is the button that i want to display the label
        button1.grid(row=0,column=0) 

        button2 = tk.Button(f, text="Hit",borderwidth=5, font=(18),command = self.hit)
        button2.grid(row=0,column=1)
        f.pack(side="bottom")

        button3 = tk.Button(self, text="Quit", font=(18))
        button3.pack(side="right", pady=50)

        self.randomise()

    def randomise(self):
        self.deal['text'] = str(randint(1,21))
        self.score['text'] = str(randint(1,21))

    def hit(self):
        current_score = int(self.score['text'])
        new_score = current_score + randint(1,21)
        self.score['text'] = str(new_score)


    def win(self):
            if int(self.score['text']) > int(self.deal['text']):
                tts = tk.Label(self, text="win", font=(20))
                tts.pack()
            else:
                lose = tk.Label(self, text="lose", font=(10))
                lose.pack() #The if statement

if __name__ == "__main__":
    app = WINDOW()
    app.geometry("800x400")

    app.mainloop()