【发布时间】:2015-05-21 10:25:18
【问题描述】:
其实我有一个大问题。 我已经有一个 tkinter 窗口,我想打开另一个。
import Tkinter
from Tkinter import *
import threading, time
from PIL import Image, ImageTk
from record_pd import *
class Gui_Record(Tkinter.Tk):
def __init__(self, tkroot):
self.root = Tk()
self.root.title("Enregistreur")
#self.root.geometry()
self.root.geometry("%dx%d+%d+%d" % (500, 70, 400, 300))
self.root.c = Canvas(tkroot, bg='black')
self.root.c.pack(fill=BOTH, expand=YES)
self.initialize()
self.recorder = RecordPd(tkroot)
self.recorder.init_recorder()
def initialize(self):
#self.root.grid()
self.root.resizable(False, False)
self.Imgtmp = PhotoImage(file="img/record.png")
self.imgclear = PhotoImage(file="img/clear.png")
self.root.title = Tkinter.Label(self.root, text="Enregistreur Orgue Sensoriel", bg="black", fg="white", font=("Helvetica", 16))
self.root.title.pack()
self.root.button = Tkinter.Button(self, command=self.OnButtonClick, bg="black", bd=0)
self.root.button.config(highlightthickness=0)
self.root.button.config(activebackground="black")
self.root.button.config(image=self.Imgtmp)
self.root.button.pack()
self.root.bind("<Destroy>", self._onDestroy)
self.resume = True
self.activate = False
def setTkroot(self, tkroot):
self.tkroot = tkroot
def _onDestroy(self, e):
self.resume = False
self.recorder.stop_recording()
def OnButtonClick(self):
if (self.activate == False):
self.resume = True
self.recorder.open_wav()
self.recorder.start_recording()
thread = threading.Thread(target=self.threadClignoter)
thread.start()
self.activate = True
print("In recording..")
else:
self.stopThread()
self.recorder.stop_recording()
self.activate = False
def threadClignoter(self):
isVisible = True
while self.resume:
if isVisible:
clr = self.imgclear
else:
clr = self.Imgtmp
self.root.button.config(image=clr)
isVisible = not isVisible
time.sleep(0.5)
def stopThread(self):
print("Record done.")
self.resume = False
self.root.button.config(image=self.Imgtmp)
当我调用我的对象时,我会这样做:
rec = Gui_Record(self.tkroot)
rec.mainloop()
当我启动一个窗口时,它没关系。但是当我将我的新窗口添加到我的父窗口时,它发生了:
traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1489, in __call__
return self.func(*args)
File "/home/naqued/Documents/assembla/backup/naqued-s-space/stido/gui_stido.py", line 139, in launch_recorder
app = Gui_Record(self.tkroot)
File "/home/naqued/Documents/assembla/backup/naqued-s-space/stido/record_gui.py", line 18, in __init__
self.initialize()
File "/home/naqued/Documents/assembla/backup/naqued-s-space/stido/record_gui.py", line 35, in initialize
self.root.button = Tkinter.Button(self, command=self.OnButtonClick, bg="black", bd=0)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2128, in __init__
Widget.__init__(self, master, 'button', cnf, kw)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2049, in __init__
BaseWidget._setup(self, master, cnf)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2022, in _setup
if not master:
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1848, in __getattr__
return getattr(self.tk, attr
.... ... ... ... .. .. ...
return getattr(self.tk, attr)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1848, in __getattr__
return getattr(self.tk, attr)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1848, in __getattr__
return getattr(self.tk, attr)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1848, in __getattr__
return getattr(self.tk, attr)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1848, in __getattr__
return getattr(self.tk, attr)
RuntimeError: maximum recursion depth exceeded while calling a Python object
我不对我的代码进行递归。 我不知道发生了什么,也没有在网上找到任何东西。
【问题讨论】:
-
sys.getrecursionlimit() 返回什么?
-
我已经解决了这个问题,我会在几个小时内发布我的代码 :)
标签: python tkinter runtime tkinter-canvas