Как поставить виджет сообщений tkinter на холсте tkinter - PullRequest
0 голосов
/ 13 октября 2019

Я пытался сделать окно с помощью tkinter. На главном экране у меня будет метка, несколько кнопок, а затем сообщение, все на tkinter.Canvas. Я создал их в разных функциях, но даже тогда ярлык и кнопки остались на холсте. Сообщение не пришло, возвращая ошибку:

  File "C:\Users\bobby\AppData\Local\Programs\Python\Python35-32\NFL Model\nflScreen.py", line 54, in homeScreen
    self.homeText = tk.Message(master=self.canvas, text=self.getText(0), width=550)
  File "C:\Users\bobby\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 2816, in __init__
    Widget.__init__(self, master, 'message', cnf, kw)
  File "C:\Users\bobby\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__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)

По сути, я создаю tkinter.Canvas в makeScroll(). Когда я добавляю виджеты к нему в showMenu(), это работает. Но когда я пытаюсь добавить виджеты в homeScreen(), это не так. Кто-нибудь знает почему и как это исправить?

1 Ответ

0 голосов
/ 20 октября 2019

Через некоторое время я обнаружил, что это просто логическая ошибка. В моем реальном коде я вызвал функцию, которая удаляла бы объект canvas в начале функции homeScreen ().

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