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