python - 如何在不使用更改后的按钮打开新窗口的代码的情况下更改按钮
问题描述
我试图做一个简单的商店来改变主窗口的背景。但是当您单击购买按钮(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
是否有另一种方法可以将定义中使用的变量传递给另一个定义?
解决方案
您正在函数中创建 tkinter 窗口openshop
。这意味着每当您运行该函数时openshop
,都会创建另一个窗口。您必须从以下位置修改您的功能:
...
def openshop():
global root2
root2 = Tk() #< creates the window
...
至:
...
global root2
root2 = Tk() #< creates the window
def openshop():
...
这将在每次openshop
再次运行时重新配置根,但不会创建另一个窗口。
推荐阅读
- c - 如何使用 malloc 和 realloc 使用 C 分配字符串
- python - 如何为发布配置不同的请求正文并在 django-rest-framework 中对同一端点进行调用
- laravel - 试图理解 model::make() x model::create()
- javascript - 如何在页面加载时在 HTML 选择选项中选择 JSON 结果
- javascript - WebPack-React-TypeScript:加载 CSS 和导出类型
- .net - 加载类型库/DLL(任何 Nuget 包)时出错
- c# - C# 中的运算符优先级让我很困惑
- python - 弃用警告:firefox_profile 已被弃用,请传入一个服务对象
- python - 向量化/并行化 GEKKO 方程
- commit - 我的 gitignore 文件有什么问题,因为在测试执行时我不应该在 Commit 中看到未暂存的文件(没有代码更改)?