首页 > 解决方案 > 如何在不使用更改后的按钮打开新窗口的代码的情况下更改按钮

问题描述

我试图做一个简单的商店来改变主窗口的背景。但是当您单击购买按钮(buyblue)时,它应该将按钮上的文本更改为 gekauft(以德语出售)。但是由于按钮在另一个定义中出现,我用返回来访问它,当我现在单击按钮时,它会打开一个带有更改按钮的新窗口。有没有办法解决这个问题,只有已经打开的窗口上的按钮发生变化而没有新窗口打开?

它是用 python 3 和 tkinter 模块编写的。

click = 10
bluecost = 10
def openshop():
    global root2
    root2 = Tk()
    root2.title("SIMPLE CLICKER SHOP")
    root2.geometry("700x400")
    root2.resizable(height = False, width = False)
    root2.configure(bg = "white")


    buttonblue = Button(root2, text = "3000 Clicks", bg = "maroon1", command = buyblue)
    buttonblue.place(x = 120, y = 120)
    return buttonblue

def buyblue():
    global click
    global bluecost
    buttonblue=openshop()

    if click >= int(bluecost):
            click -= int(bluecost)
            global root
            global label
            global click1
            root["bg"]="blue"
            click1["bg"]="blue"
            label["bg"]="blue"
            buttonblue["bg"]="green"
            buttonblue["text"] = "Gekauft"
            bluecost = 0

是否有另一种方法可以将定义中使用的变量传递给另一个定义?

标签: pythonpython-3.xtkinter

解决方案


您正在函数中创建 tkinter 窗口openshop。这意味着每当您运行该函数时openshop,都会创建另一个窗口。您必须从以下位置修改您的功能:

...
def openshop():
    global root2
    root2 = Tk()  #< creates the window
    ...

至:

...
global root2
root2 = Tk() #< creates the window
def openshop():
    ...

这将在每次openshop再次运行时重新配置根,但不会创建另一个窗口。


推荐阅读