возникли проблемы с оператором if - PullRequest
0 голосов
/ 20 мая 2019

С оператором if, который я вставил, он будет отображать только оператор потерь, даже если он правильный.

Я не уверен, правильно ли написано утверждение.

Я пытаюсь сделать так, чтобы при нажатии на пуск обе метки отображали число от 1 до 21.

Кроме того, если это возможно, я хочу сделать так, чтобы при нажатии кнопки нажатия номер добавлялся к метке. Например, нажатие на кнопку прибавит 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 Ответ

1 голос
/ 20 мая 2019

if score > deal: сравнивает два объекта метки tkinter, а не значение счета и сделки. Попробуйте получить значения меток и преобразовать их в целые числа перед выполнением сравнения.

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

Чтобы помочь с вашими другими вопросами. Чтобы выбрать случайное число от 1 до 21, используйте функцию randint, содержащуюся в случайном модуле python (см. Код ниже). Я добавил новую функцию 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...