如何将 tkinter 消息小部件放在 tkinter 画布上



我试图用tkinter制作一个窗口。在主屏幕上,我会有一个标签,几个按钮,然后是一个消息,所有这些都在tkinter.Canvas上。我以不同的功能创建了它们,但即便如此,标签和按钮也出现在画布上。消息没有,返回错误:

File "C:UsersbobbyAppDataLocalProgramsPythonPython35-32NFL ModelnflScreen.py", line 54, in homeScreen
self.homeText = tk.Message(master=self.canvas, text=self.getText(0), width=550)
File "C:UsersbobbyAppDataLocalProgramsPythonPython35-32libtkinter__init__.py", line 2816, in __init__
Widget.__init__(self, master, 'message', cnf, kw)
File "C:UsersbobbyAppDataLocalProgramsPythonPython35-32libtkinter__init__.py", line 2139, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: bad window path name ".59508144.59508176"

这是我制作窗口的代码:

import tkinter as tk
class Window(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.pack()
self.makeScroll(); self.showMenu(); self.homeScreen(); 
def makeScroll(self):
self.canvas = tk.Canvas(self, bg='#F0F0F0', width=1000, height=600)
self.canvas.grid(row=0, column=0) ###Makes the Canvas. This part works well
def showMenu(self):
self.home = tk.Button(self.canvas, text="Home", command=self.homeScreen, width=10)
self.home.grid(column=0, row=1) ###Make some buttons, this part works well. 
self.rank = tk.Button(self.canvas, text="Rankings", command=self.rankingScreen, width=10)
self.rank.grid(column=1, row=1)
###I tried adding a Message here to the canvas, and it worked, but I need the message to be made in another function
def homeScreen(self):
###This part doesn't work. I know that self.canvas is still a variable. 
self.homeText = tk.Message(master=self.canvas, text=self.getText(0), width=550)
self.homeText.grid(column=0, row=3, columnspan=7)

基本上,我在makeScroll()中创建tkinter.Canvas。当我在showMenu()中向其添加小部件时,这有效。但是当我尝试在homeScreen()中添加小部件时,它没有。有谁知道为什么,以及如何解决它?

过了一会儿我发现这只是一个逻辑错误。在我的实际代码中,我调用了一个函数,该函数将在 homeScreen(( 函数的开头删除画布对象。

最新更新