我还没有找到一条线索来回答我的问题,所以:
我的图形用户界面由3个独立的“窗口”(框架?)as类:TextInput、TextOutput和Statistic。出于性能原因,我只运行统计.mainloop()但其他班级也出现了。在
我想要我的TextInput类做的是 迭代一个包含字符串的列表,并将它们插入到textwidget中”自我参考文本". 在
class TextInput(tk.Frame):
LARGE_FONT = ("Arial Bold ", 18)
SMALL_FONT = ("Arial", 16)
BGC = '#CDCDC1'
FG = ['#000000', '#f44242']
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
# print('415 TextInput instance: ', type(self))
self.controller = controller
self.reference = [] # some strings in here
self.createText()
def createText(self):
self.ref_text = tk.Text(self, height=30, width=100, font=TextInput.SMALL_FONT)
self.ref_text.config(background=TextInput.BGC)
self.ref_text.grid(column=0, columnspan=4, row=1, padx=5, sticky="W")
def display_ref(self, line):
print('line: ', line)
self.ref_text.insert('end', line)
def read_ref(self):
for line in self.reference:
self.ref_text.insert('end', line)
self.ref_text.after(1500, self.read_ref)
after()方法插入“的所有字符串”自我参照“而不是预期的FOR循环。而且,整个TextInput应用程序似乎倾斜(太多递归?) 在另一个版本里我试着打电话给你
^{pr2}$1500毫秒后,再次将所有文本放入小部件中
我做错什么了? 我只跑是不是有问题
Statistik.mainloop()
在底部而不是文本输入.mainloop(). 谢谢你的帮助
至于最小的例子:
import tkinter as tk
class Interface(tk.Tk):
def __init__(self, name, page, *kwargs):
tk.Tk.__init__(self, name, *kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
container.master.title(name)
self.frames = {}
self.windows = {}
self.windows[name] = page
self.window = page(container, self)
self.frames[name] = self.window
self.window.grid(row=0, column=0, sticky='nsew')
self.show_window(name)
def show_window(self, cont):
window = self.frames[cont]
window.tkraise()
class TextInput(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.reference = ['a is a sentence', 'b follows a', 'c closes the session']
self.createText()
self.read = True
self.read_ref()
def stop_read(self):
self.read = False
def createText(self):
self.ref_text = tk.Text(self, height=30, width=80,)
self.ref_text.grid(column=0, row=1, columnspan=3, padx=5, sticky="W")
def display_ref(self, line):
print('line: ', line)
self.ref_text.insert('end', line)
def read_ref(self):
'''
the goal is to loop through self.reference line by line
with a 1500 ms pause inbetween
'''
for line in self.reference:
if self.read:
self.ref_text.insert('end', line + '\n')
self.ref_text.after(1500, self.read_ref)
else:
return
class Statistik(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
'''does some other stuff'''
textinput_instance = Interface('TextInput', TextInput)
statistik_instance = Interface('Statistik', Statistik)
statistik_instance.mainloop()
如果您的目标是在列表中循环,以1500毫秒的间隔显示每一行,那么最简单的方法就是让一个函数执行一次迭代,然后使用
after
重复它自己可能是这样的:
然后,只调用此函数一次以启动该过程:
^{pr2}$如果要停止它,可以检查函数中的标志:
上面的代码缓慢地从
self.reference
中删除项。如果不希望发生这种情况,请在启动时传递self.reference
的副本,以便函数将从原始数据的副本中删除项。在相关问题 更多 >
编程相关推荐