- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我决定尝试使用类来重新创建游戏,这样我就不必使用全局变量,但是当我尝试运行游戏时出现错误。
Traceback (most recent call last): File "D:\Users\James\Desktop\botmod OOP\index.py", line 203, in <module> Game.New_Game(Root) File "D:\Users\James\Desktop\botmod OOP\index.py", line 18, in New_Game Play_Button = self.Start_Canvas.create_window(300, 325, window = Play_Button) File "C:\Users\James\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py">, line 2501, in create_window return self._create('window', args, kw) File "C:\Users\James\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py">, line 2474, in _create *(args + self._options(cnf, kw))))
_tkinter.TclError: bad window path name ".!button"
我已经尽我最大的能力仔细研究了这个问题,无法单独解决错误是什么。下面是我的代码,如果需要,我可以提供所有代码,只是评论。它应该创建一个 Tkinter 按钮,然后将它应用到 Canvas 上,但它给了我上面的错误。
def New_Game(self, Root):
self.Start_Canvas = Canvas(Root, width = 600, height = 500, bd=0, highlightthickness=0, bg = '#ffffff')
self.Start_Canvas.pack()
Title = self.Start_Canvas.create_text(300, 163, text = "BOTMOD", font = ('Cinema Gothic BTN Shadow', 75, 'normal'))
Gen_PButton = Button(text = "PLAY", width = 10, font=('Arial', 15), command = self.Play_Game)
Play_Button = self.Start_Canvas.create_window(300, 325, window = Gen_PButton)
Gen_EButton = Button(text = "EXIT", width = 10, font=('Arial', 15), command = lambda: self.Game_End("EXIT"))
Exit_Button = self.Start_Canvas.create_window(300, 375, window = Gen_EButton)
在我使用 oop 之前,它使用全局变量和函数工作,所以我无法在定义按钮时找到导致问题的原因。
示例代码如下
from tkinter import *
from random import choice, shuffle
class Game:
def __init__(self):
self.Playing_Game = True
self.Game_Paused = False
self.Restart_Game = False
self.Already_Played = False
def New_Game(self, Root):
self.Start_Canvas = Canvas(Root, width = 600, height = 500, bd=0, highlightthickness=0, bg = '#ffffff')
self.Start_Canvas.pack()
Title = self.Start_Canvas.create_text(300, 163, text = "BOTMOD", font = ('Cinema Gothic BTN Shadow', 75, 'normal'))
Gen_PButton = Button(text = "PLAY", width = 10, font=('Arial', 15), command = self.Play_Game)
Play_Button = self.Start_Canvas.create_window(300, 325, window = Gen_PButton)
Gen_EButton = Button(text = "EXIT", width = 10, font=('Arial', 15), command = lambda: self.Game_End("EXIT"))
Exit_Button = self.Start_Canvas.create_window(300, 375, window = Gen_EButton)
def Play_Game(self):
if self.Already_Played == False:
self.Start_Canvas.destroy()
self.Menu_Canvas = Canvas(Root, width = 600, height = 500, bd=0, highlightthickness=0, bg = '#C0C0C0')
self.Menu_Canvas.pack()
def Game_End(self):
if self.End_Option == "EXIT":
self.Playing_Game = False
Root.destroy()
else:
self.Game_Finished = True
self.Game_Canvas.create_rectangle(120, 120, 480, 300, fill = "#ffffff")
self.Game_Canvas.create_text(300, 210, text = End_Option, font = ('Abadi', 35, "bold"))
#Continue_Button = Button(Root, text = 'Continue', command = self.Game_Restart)
Exit_Button = Button(Root, text = 'Exit', command = lambda: self.Game_End('EXIT'))
#Continue_Button.pack()
Exit_Button.pack()
Root = Tk()
Game = Game()
while True:
while Game.Restart_Game == False:
if Game.Playing_Game == False:
break
else:
Game_Finished = False
Root = Tk()
if Game.Already_Played == True:
Game.Play_Game()
Root.mainloop()
elif Game.Already_Played == False:
Game.New_Game(Root)
Root.mainloop()
break
最佳答案
当前的问题是您没有为按钮指定父级。 tl;dr 是您只需要将 Root
(或其他一些适当的父窗口)添加到 Gen_Pbutton
和 Gen_EButton
的构造函数中,如您为所有其他小部件所做的。
下面两行有一个重要的区别:
Gen_PButton = Button(Root, text = "PLAY", width = 10, font=('Arial', 15), command = self.Play_Game)
Gen_PButton = Button(text = "PLAY", width = 10, font=('Arial', 15), command = self.Play_Game)
两个版本都为按钮小部件创建了一个新名称(在本例中为 .!button
),并创建了一个与该名称关联的新 tkinter.Button
对象——但是第一个还要求 Root
创建名为 .!button
的实际小部件,而第二个不要求任何人创建小部件。所以你最终得到了一个附加到一个不存在的小部件的 Button
对象,每当你尝试使用那个 Button
对象时,你都会得到这样的错误:
_tkinter.TclError: bad window path name ".!button"
出现此类错误的通常原因是您破坏了底层按钮小部件,但继续尝试使用 Button
。但在这种情况下,您一开始就没有创建小部件,这显然会导致同样的问题。
要准确了解幕后发生的事情,您必须了解 Tkinter 的工作原理——实际的 GUI 小部件和窗口由完全不同的语言 Tcl/Tk 中的代码管理,而 tkinter 是 Python 对象与 Tcl 对象的关联按名称并代理对这些 Tcl 对象的每个方法调用。
您可能想知道为什么 tkinter 首先让您摆脱这种构造,而不是给您一个更容易理解的错误,更早的一行,如下所示:
_tkinter.TclError: trying to create ".!button" with null parent
嗯,从技术上讲,这是完全合法的。您可能稍后通过一些较低级别的方法创建该 Tcl 小部件,或者您可能已经创建了该 Tcl 小部件并且现在只想在它周围包装一个 tkinter Controller 。两者都是非常罕见的情况,但它们并非毫无意义,因此 tkinter 允许它们。
而且,更重要的是:您真的会更容易理解“更好”的错误消息吗?当您第一次学习 tkinter 时,两者都没有意义,并且两者都是您可以学习理解和处理的东西。
关于python - 我收到错误 _tkinter.TclError : bad window path name ".!button" and i'm not sure why,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49825857/
我查阅了CustomTkinter的文档,它似乎没有内置对使用SizeNotifier的响应式布局的支持。如何在没有“SizeNotifier”的情况下在CustomTkinter应用程序中实现响应式
我带着一个新的错误回到这里,我不能解决...这是一个奇怪的错误,idk,我把图像在同一目录的程序,在目录中指定的代码.啊,我不知道,但这是所有的代码:。我希望这对你来说足够了..。我很沮丧,我把图像放
我知道您会说这是重复的,但事实并非如此。我收到错误: Traceback (most recent call last): File "calculator.py", line 1, in from
所有教程都简单import tkinter , 不过,我想知道为什么不 import _tkinter ?如果我的理解是正确的,_tkinter是 cpython 和 tkinter 中的实际库是接口
我正在尝试在 Predix 上推送 Python 微服务。 该代码具有 matplotlib 依赖性。 对于具有以下堆栈跟踪的应用程序, cf Push 失败。 2017-05-08T19:39:51
这个问题已经有答案了: "UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot s
我想在c++代码中使用python,但是出现错误,这是最简单的“hello word”程序。 导入PIL.Image是可以的,但是对于Tkinter,它会输出“ImportError: No modu
我知道这个问题已经被问过好几次了,但我还是想不出我的问题的答案。我不断收到同样的错误,但不知道如何解决。 这是我的代码: from Tkinter import * from PIL import I
这个问题在这里已经有了答案: python ImportError: No module named Tkinter (5 个答案) 关闭 3 年前。 在我的 Linux Mint 18 上,我试图
我正在使用 python 2.7.2 和 windows 7。我搜索了互联网、帮助和其他资源,但我找不到我的问题的答案。 我的一个源导入 tkinter,而这个导入 _tkinter。此时它说 Imp
我在我的 Linux 上使用 Page GUI 构建器创建了一个 gui。它有一个框架和一个 Canvas 。我正在尝试在其中一个框架上播放视频。现在,当我运行代码时,我收到 _tkinter.Tcl
在我的 python 应用程序中,我使用 matplotlib。当我开始运行时,它会抛出一个错误: ImportError: No named '_tkinter', please install t
一位 friend 发给我一些 Tkinter/Tix 代码,但它是针对 Python 2 的: from Tkinter import * import Tix import ScrolledTex
我一直在搜索它,但在网上找不到关于这个主题的任何内容。 当我在 python 3.5 中开发导入 tkinter 或 pyglet 的程序时,我完全能够从我的 Linux Mint 安装上的命令行启动
我遇到了与许多其他问题相同的问题,但尚未找到有效的解决方案。这是在 Windows 10 64 位、Python 3.6 32 位上。 我试过多次卸载,64 位 Python,安装文件中路径和变量的各
我正在尝试使用 pyenv 安装版本的 python 3.6.5 在 RHEL 上使用 Matplotlib。 (使用以下命令安装) → pyenv install 3.6.5 Installing
我有一些旧的 Python 脚本,它们使用了与当前系统所配备的不同版本的 tkinter。在过去,有一个名为 _tkinter.createfilehandler() 的方法存在并且有效。对于当前版本
我想在菜单栏上显示一个图标,所以使用这个 information ,我这样编码: img = Image.open("help.png") menubar.add_cascade(label="Hel
Ubuntu 16.04 ,安装了 nvidia-docker,一个正在运行的 tensorflow 容器, python 2.7 我想在容器内运行一个简单的 python 代码。如下图 from t
我正在尝试构建一个实时项目,其中状态每秒更新一次,因此某些部分代码会不断重复。当我想更改必须更新的信息时,我只需单击新按钮,它会为我提供第一个窗口,我可以在其中更新新信息。但这样做会给我以下错误。请帮
我是一名优秀的程序员,十分优秀!