Кто-нибудь знает, как совместить эти функции? - PullRequest
0 голосов
/ 31 октября 2019

Я хочу объединить функции def clicked и def clicked2, потому что они одинаковы, но я не знаю, как это сделать. Я еще не пробовал, но не могу придумать, как это сделать.

from tkinter import *
import random
window = Tk()
x = round(random.random()) + 1
m = 7 
window.title("NIM-7 spel") 
window.geometry('350x200') 
lbl = Label(window, text="Player " + str(x) + " next")
lbl2 = Label(window, text="Their are " + str(m) + " coins left")
lbl.grid(column=0, row=1) 
lbl2.grid(column=1, row=0)

def clicked(): 
    global x
    global m
    m -= 1
    if m < 1:
        lol = "Player " + str(x) + " won!"
        res = ""
    else: 
        if x == 1: 
            x = 2
        else: 
            x = 1
        lol = "Their are " + str(m) + " coins left"
        res = "Player " + str(x) + " is next"
    lbl.configure(text=res) 
    lbl2.configure(text=lol)
def clicked2(): 
    global x
    global m
    m -= 2
    if m < 1: 
        lol = "Player " + str(x) + " won!"
        res = ""
    else: 
        if x == 1: 
            x = 2
        else: 
            x = 1
        lol = "Their are " + str(m) + " coins left"
        res = "Player " + str(x) + " is next"
    lbl.configure(text=res)
    lbl2.configure(text=lol)

btn1 = Button(window, text="Take 1 coin", command=clicked)
btn2 = Button(window, text="Take 2 coins", command=clicked2)
btn1.grid(column=1, row=1)
btn2.grid(column=2, row=1)
window.mainloop() 

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Вы можете добавить аргументы к кнопкам tkinter, если используете лямбда-функцию. Некоторые идентичные вопросы уже задавались:

Функции в Tkinter

Как вызвать функцию с аргументами в функции "Button" из пакета python "tkinter"?

def clicked(value): 
    global x
    global m
    m -= value
    if m < 1:
        lol = "Player " + str(x) + " won!"
        res = ""
    else: 
        if x == 1: 
            x = 2
        else: 
            x = 1
        lol = "Their are " + str(m) + " coins left"
        res = "Player " + str(x) + " is next"
    lbl.configure(text=res) 
    lbl2.configure(text=lol)

btn1 = Button(window, text="Take 1 coin", command = lambda:clicked(1))
btn2 = Button(window, text="Take 2 coins", command = lambda:clicked(2))
0 голосов
/ 31 октября 2019

В качестве параметра укажите, сколько вы хотите уменьшить m. Итак:

def clicked(decrement): 
    global x
    global m
    m -= decrement
    if m < 1: 
        lol = "Player " + str(x) + " won!"
        res = ""
    else: 
        if x == 1: 
            x = 2
        else: 
            x = 1
        lol = "Their are " + str(m) + " coins left"
        res = "Player " + str(x) + " is next"
    lbl.configure(text=res)
    lbl2.configure(text=lol)

Затем вызовите это так: clicked(1) и clicked(2).

Поскольку вы передаете его в качестве параметра Button, вы можете создать фиктивные функции:

def clicked1():
    clicked(1)

и аналогичные для clicked2.

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