Проблема tkinter с переменной не считается, сбрасывается или сбрасывается - PullRequest
0 голосов
/ 25 декабря 2018

Спасибо, что помогли мне.Итак, я заработал переменные деньги, и они показывают 100.

Теперь код должен добавить деньги или уменьшить их.

Эта небольшая программа почти работает, но я не могу понять выигрыш.У меня

есть переменная, показывающая счет, но она остается равной 100. Функция перезапуска

также не работает.

from tkinter import *  
import random  
import time

#main settings  
money = 100

def get_money(value):
    global money  
    money = value  
    output.delete(0.0, END)

tk = Tk()  
tk.title('Gamble game')  
tk.configure(background='black')

#gameoutput box
output = Text(tk, width=50, height=8, wrap=WORD, bg='white')  
output.grid(row=1, column=0, sticky=W)

#restart game, reset money
Button(tk, text='Restart',width=10, command=get_money(100)).grid(row=3,\  
 column=0, sticky=W)

#money
Label(tk, text=money, bg='black', fg='white', font='none 12 
bold').grid(row=0,\
 column=0, sticky=W)

#game start_round
def start_round():
    output.delete(0.0, END)
    output.insert(END, 'Here are your numbers:\n')
    for x in range(0, 3):
        x = random.randint(0, 20)
        output.insert(END, x)
        time.sleep(0.2)
        try:
            if x == 20:
                output.insert(END, '\nYou won!\n')
                get_money += 50
            else:
                output.insert(END, '\nLost!\n')
                get_money = money - 10
        except:
            output.insert(END, 'Something went wrong')

Button(tk, text='Enter',width=10, command=start_round).grid(row=2, 
column=0, sticky=W)

#exit game  
def exit_window():
    tk.destroy()
    exit()
Button(tk, text='Exit',width=10, command=exit_window).grid(row=4, 
column=0, sticky=W)  

#main loop

tk.mainloop()

1 Ответ

0 голосов
/ 25 декабря 2018

Ваш код - беспорядок.Давайте рассмотрим пример: функция get_money():

def get_money(value):
Button(tk, text='Restart',width=10, command=get_money(100)).grid(row=3,\  
get_money += 50
get_money = money - 10

Вы определяете get_money как функцию, но для опции command в Button вместо передачи функции вы передаетерезультат вызова get_money(100), который равен None.(lambda: get_money(100) будет работать лучше здесь.) И когда приходит время вызывать get_money() в вашем коде, вы внезапно воспринимаете это как локальную переменную int!Проблемы стиля включают в себя: голые except;использование переменной x для двух разных целей в одном цикле;видимое обновление общего количества игрока не заметно.

Давайте переделаем ваш код в играбельную игру:

from tkinter import *
from random import randint

INITIAL_STAKE = 100

money = INITIAL_STAKE

def adjust_money(value):
    global money

    money += value
    money_var.set(money)

def reset_money():
    global money

    money = INITIAL_STAKE
    money_var.set(money)
    output.delete(0.0, END)

def start_round():
    output.delete(0.0, END)
    output.insert(0.0, 'Here are your numbers:\n')

    for _ in range(0, 3):
        number = randint(0, 20)
        output.insert(END, number)

        if number == 20:
            output.insert(END, '\nYou won!\n')
            adjust_money(50)
        else:
            output.insert(END, '\nYou Lost!\n')
            adjust_money(-10)

def exit_window():
    root.destroy()
    exit()

root = Tk()
root.title('Gamble game')
root.configure(background='black')

money_var = IntVar()
money_var.set(money)

output = Text(root, width=50, height=8, wrap=WORD)
output.grid(row=1, column=0, columnspan=3, sticky=W)

Label(root, textvariable=money_var, bg='black', fg='white').grid(row=0, column=0, sticky=W)
Button(root, text='Play', width=10, command=start_round).grid(row=2, column=0, sticky=W)
Button(root, text='Restart', width=10, command=reset_money).grid(row=2, column=1)
Button(root, text='Exit', width=10, command=exit_window).grid(row=2, column=2, sticky=E)

root.mainloop()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...