tkinter를 사용하여 GUI를 만들려고합니다. 여기에 코드가 있습니다. 그러나, 내가 그것을 실행할 때, 설정을 클릭하고 다시, 파이썬 충돌합니다. 왜 이런 일이 일어나고 어떻게 해결할 수 있을지 아십니까? 그것도 내가 파괴 기능을 실행할 때 발생, 또는 나는 다른 TK에 창에 뭔가를 할 때Tkinter destroy 메서드가 프로그램을 충돌시킵니다.
코드 : (일부는 필요하지 않을 수도 있습니다,하지만 난 그것을 포함)
import tkinter as tk
class moveFrame():
def move(self, event):
widget = event.widget
widget.place(x = widget.winfo_x() + event.x - widget.startX, y = widget.winfo_y() + event.y - widget.startY)
def resize(self, event):
widget = event.widget
wlength = widget["length"]
wwidth = widget["width"]
widget.config(length = wlength + event.x - widget.startX, width = wwidth + event.y - widget.startY)
def getPos(self, event):
widget = event.widget
widget.lift()
widget.startX, widget.startY = event.x, event.y
def __init__(self, master, frameInfo, xPos, yPos):
self.frame = tk.Frame(master, cnf = frameInfo)
self.frame.bind("<Button-1>", self.getPos)
self.frame.bind("<B1-Motion>", self.move)
self.frame.bind("<B3-Motion>", self.getPos)
self.frame.bind("<Button-3>", self.resize)
self.frame.place(x = xPos, y = yPos)
def homescreen():
screen = tk.Tk()
#arrangeButton = tk.Canvas(screen, width = 120, height = 40, bg = "purple")
#arrangeButton.create_text(60, 20, text = "Arrange Homescreen")
#arrangeButton.place(x = 0, y = 0)
#arrangeButton.bind("<Button-1>", lambda event: arrange(arrangeButton))
settingsButton = tk.Canvas(screen, width = 60, height = 60)
settingsButton.place(x = 20, y = 20)
settingsButton.create_oval(5, 5, 58, 58, fill = "#a6a6a6", tags = "click")
settingsButton.create_oval(15, 10, 58, 53, fill = "#000", tags = "click")
settingsButton.create_oval(27, 22, 46, 41, fill = "#00f", tags = "click")
settingsButton.tag_bind("click", "<Button-1>", lambda event: settings())
def settings():
sscreen = tk.Tk()
#Get previous settings
try:
file = open("settings.txt", "r")
except IOError:
file = open("settings.txt", "x")
finally:
file = open("settings.txt", "r+")
curSet = [x.strip("\n") for x in file.readlines()]
#Widgets
back = tk.Canvas(sscreen, width = 60, height = 48)
back.place(x = 20, y = 20)
back.create_rectangle(25, 22, 60, 26, fill = "#000", tags = "sclick")
back.create_polygon(10, 24, 25, 10, 25, 38, fill = "#000", tags = "sclick")
back.create_text(42, 32, text = "Back", tags = "sclick")
back.tag_bind("sclick", "<Button-1>", lambda event: sscreen.destroy())
def arrange(*widgets):
arrangeScreen = tk.Tk()
arrangeButton = widgets[0]
aBaF = moveFrame(arrangeScreen, {"bd" : 4, "bg" : "#a6a6a6"}, arrangeButton.winfo_x() - 4, arrangeButton.winfo_y() - 4)
aBa = tk.Canvas(aBaF, width = 120, height = 40, bg = "purple")
def load(goTo, ms):
load = tk.Tk()
loadImage = tk.Canvas(load, height = 300, width = 300, bg = "black")
loadImage.pack()
loadImage.create_oval(125, 130, 175, 180, fill = "white")
loadImage.create_oval(130, 140, 170, 150, fill = "black")
loadImage.create_oval(130, 140, 171, 151, fill = "white")
loadImage.create_oval(152, 140, 148, 150, fill = "black")
load.after(ms, lambda: [goTo(), load.destroy()])
load(homescreen, 1)
최소한의 예와 추적은 먼 길을 갈 것입니다. –
IDLE 내에서이 스크립트를 실행합니까? –
"파이썬 충돌"이란 무엇을 의미합니까? 스택 트레이스를 얻었습니까? 또한 코드 샘플의 들여 쓰기가 손상되었습니다. –