Python tkinter重新初始化时移动画布
我试图在tkinter中创建一个网格板,每当我按下重新启动按钮时,我希望它在同一位置创建一个新的网格板。我不是在重新绘制黑板,而是在重新初始化这个类 我的问题是,它确实为我创建了一个新的董事会,但董事会向下移动了50%,我不知道为什么。下面是我使用的代码和一些图片来说明我的问题。提前谢谢Python tkinter重新初始化时移动画布,python,object,tkinter,Python,Object,Tkinter,我试图在tkinter中创建一个网格板,每当我按下重新启动按钮时,我希望它在同一位置创建一个新的网格板。我不是在重新绘制黑板,而是在重新初始化这个类 我的问题是,它确实为我创建了一个新的董事会,但董事会向下移动了50%,我不知道为什么。下面是我使用的代码和一些图片来说明我的问题。提前谢谢 import tkinter as tk from tkinter import ttk, Tk class GUI(tk.Frame): def __init__(self):
import tkinter as tk
from tkinter import ttk, Tk
class GUI(tk.Frame):
def __init__(self):
super().__init__()
self.pack(fill=tk.BOTH, expand=True)
self.canvas = tk.Canvas(self)
self.create_board()
def create_board(self):
for y in range(3):
for x in range(3):
x1 = x * 150 + 30
x2 = x1 + 150
y1 = y * 150 + 30
y2 = y1 + 150
self.canvas.create_rectangle(x1, y1, x2, y2, outline="#090808", fill="#fffdfd")
self.canvas.pack(fill=tk.BOTH, expand=True)
button = ttk.Button(self.canvas, text='Restart', command=self.restart)
button.place(x=150*3/2, y=150*3+50)
def restart(self):
self.canvas.destroy()
self.__init__()
def main():
root = Tk()
GUI()
root.geometry("550x550")
root.mainloop()
if __name__ == '__main__':
main()
您不应该一直调用
\uuuu init\uuuu()
方法。相反,它只能在第一次初始化时使用。绕过它的一种方法是创建另一个方法并重新初始化它
以下是更正后的代码:
import tkinter as tk
from tkinter import ttk, Tk
class GUI(tk.Frame):
def __init__(self):
super().__init__()
self.reinitialize()
def reinitialize(self):
self.pack(fill=tk.BOTH, expand=True)
self.canvas = tk.Canvas(self)
self.create_board()
def create_board(self):
print()
for y in range(3):
for x in range(3):
x1 = x * 150 + 30
x2 = x1 + 150
y1 = y * 150 + 30
y2 = y1 + 150
self.canvas.create_rectangle(x1, y1, x2, y2, outline="#090808", fill="#fffdfd")
self.canvas.pack(fill=tk.BOTH, expand=True)
button = ttk.Button(self.canvas, text='Restart', command=self.restart)
button.place(x=150*3/2, y=150*3+50)
def restart(self):
self.canvas.destroy()
self.reinitialize()
#self.__init__()
def main():
root = Tk()
GUI()
root.geometry("550x550")
root.mainloop()
if __name__ == '__main__':
main()
您不应该一直调用
\uuuu init\uuuu()
方法。相反,它只能在第一次初始化时使用。绕过它的一种方法是创建另一个方法并重新初始化它
以下是更正后的代码:
import tkinter as tk
from tkinter import ttk, Tk
class GUI(tk.Frame):
def __init__(self):
super().__init__()
self.reinitialize()
def reinitialize(self):
self.pack(fill=tk.BOTH, expand=True)
self.canvas = tk.Canvas(self)
self.create_board()
def create_board(self):
print()
for y in range(3):
for x in range(3):
x1 = x * 150 + 30
x2 = x1 + 150
y1 = y * 150 + 30
y2 = y1 + 150
self.canvas.create_rectangle(x1, y1, x2, y2, outline="#090808", fill="#fffdfd")
self.canvas.pack(fill=tk.BOTH, expand=True)
button = ttk.Button(self.canvas, text='Restart', command=self.restart)
button.place(x=150*3/2, y=150*3+50)
def restart(self):
self.canvas.destroy()
self.reinitialize()
#self.__init__()
def main():
root = Tk()
GUI()
root.geometry("550x550")
root.mainloop()
if __name__ == '__main__':
main()
谢谢,那很有帮助,汉克斯,那很有帮助