Мой текст не отображается в новом окне, в чем может быть проблема? - PullRequest
0 голосов
/ 03 марта 2020

Я пишу код, который решает судоку. Когда я открываю новое окно (с верхним уровнем), оно не показывает текст на нем. Я получаю ошибку, но я не знаю, что это значит? Кто-нибудь может мне помочь?

import tkinter
from tkinter import messagebox
from tkinter import *
from tkinter.ttk import *
from winsound import *

rootdescription = tkinter.Tk()
rootdescription.geometry("800x800")
rootdescription['cursor'] = 'tcross'
rootdescription.title("Sudoku Solver - Description")

def inputwindow():
    inputwindow = tkinter.Toplevel()
    inputwindow.geometry("800x800")
    inputwindow['cursor'] = 'tcross'
    inputwindow.title("Sudoku Solver - InputWindow")

Я создал свои два windows, как показано выше.

startpage = Frame(rootdescription)
startpage.pack()
ins1page = Frame(rootdescription)
ins2page = Frame(rootdescription)
inputpage = Frame(rootdescription)

Я не знал, была ли приведенная выше информация релевантной, но я разместил ее в любом случае.

Ниже вы можете найти код, который я использовал для создания кнопки для следующего окна.

fill1 = tkinter.Button(inputpage, text="Fill the Sudoku in!", relief=GROOVE, font='courier 10', width=86, height=40,
command=lambda:[inputwindow(), rootdescription.withdraw()])
fill1.pack()
def on_enter(e):
    fill1['background'] = 'black'
    fill1['foreground'] = 'white'
def on_leave(e):
    fill1['background'] = 'SystemButtonFace'
    fill1['foreground'] = 'black'
fill1.bind("<Enter>", on_enter)
fill1.bind("<Leave>", on_leave)
rootdescription.mainloop()
inputwindow.mainloop()

Текст ниже не будет отображаться в окне, я на самом деле не знаю, почему.

check = Frame(inputwindow)

cline1 = StringVar()
clabel1 = Label(inputwindow, textvariable=cline1, wraplength=700, font='courier 10')
cline1.set("_______________________________________________________________________________________")
clabel1.pack()

Это ошибка, которую она мне выдает каждый раз:

*** Remote Interpreter Reinitialized  ***
Traceback (most recent call last):
  File "\\V-FPS-01\Home-Edu$\93010858\Documents\informatica\Sudoku Solver.py", line 252, in <module>
    rootdescription.mainloop()
  File "C:\Program Files\Python38\lib\tkinter\__init__.py", line 1420, in mainloop
    self.tk.mainloop(n)
KeyboardInterrupt

Я изменил порядок последних двух частей кода, теперь это выглядит так:

check = Frame(inputwindow)

cline1 = StringVar()
clabel1 = Label(inputwindow, textvariable=cline1, wraplength=700, font='courier 10')
cline1.set("_______________________________________________________________________________________")
clabel1.pack()

rootdescription.mainloop()
inputwindow.mainloop()

Сейчас я получаю еще одну ошибку, но все еще не знаю, как решить мою проблему. В настоящее время ошибка выглядит следующим образом:

Traceback (most recent call last):
  File "\\V-FPS-01\Home-Edu$\93010858\Documents\informatica\Sudoku Solver.py", line 252, in <module>
    check = Frame(inputwindow)
  File "C:\Program Files\Python38\lib\tkinter\ttk.py", line 740, in __init__
    Widget.__init__(self, master, "ttk::frame", kw)
  File "C:\Program Files\Python38\lib\tkinter\ttk.py", line 557, in __init__
    tkinter.Widget.__init__(self, master, widgetname, kw=kw)
  File "C:\Program Files\Python38\lib\tkinter\__init__.py", line 2561, in __init__
    BaseWidget._setup(self, master, cnf)
  File "C:\Program Files\Python38\lib\tkinter\__init__.py", line 2530, in _setup
    self.tk = master.tk
AttributeError: 'function' object has no attribute 'tk'

Я думал, что программа перепутала названия окна и функции (потому что они совпадают), но изменение их, кажется, не делает любая разница.


Вот исполняемый код:

import tkinter
from tkinter import messagebox
from tkinter import *
from tkinter.ttk import *
from winsound import *

rootdescription = tkinter.Tk()
rootdescription.geometry("800x800")
rootdescription['cursor'] = 'tcross'
rootdescription.title("Sudoku Solver - Description")

def inputwindowf():
    inputwindow = tkinter.Toplevel()
    inputwindow.geometry("800x800")
    inputwindow['cursor'] = 'tcross'
    inputwindow.title("Sudoku Solver - InputWindow")

inputpage = Frame(rootdescription)
inputpage.pack()

fill1 = tkinter.Button(inputpage, text="Fill the Sudoku in!", relief=GROOVE, font='courier 10', width=86, height=40,
command=lambda:[inputwindowf(), rootdescription.withdraw()])
fill1.pack()
def on_enter(e):
    fill1['background'] = 'black'
    fill1['foreground'] = 'white'
def on_leave(e):
    fill1['background'] = 'SystemButtonFace'
    fill1['foreground'] = 'black'
fill1.bind("<Enter>", on_enter)
fill1.bind("<Leave>", on_leave)

rootdescription.mainloop()
inputwindow.mainloop()

check = Frame(inputwindow)

cline1 = StringVar()
clabel1 = Label(inputwindow, textvariable=cline1, wraplength=700, font='courier 10')
cline1.set("_______________________________________________________________________________________")
clabel1.pack()

Последние 6 строк должны быть go в новом окне; inputwindow.

...