对不起,如果这是一个相当具体的问题,但让我试着解释一下。旨在删除Tkinter Text Widget内容的线程无法运行。
我有一个文本框,用户可以添加文本,方法是在框中键入并点击“发送”。
问题是我需要在使用十五行后清除文本框。
这里是我试图做的:
每当用户点击发送,将文本添加到文本框,把它添加是一个数字的变量称为textlimiter。因为每个发送按钮也会创建一个新行。我可以使用变量来记录“发送”到文本框的次数。
当变量超过15时,正在监视变量的线程将清除文本框。
事情是,它似乎从来没有工作。我尝试过寻求帮助,我从一个很棒的人那里得到了一点点建议,我把所有的东西都改写成了“框架”,这样我就可以将我的所有功能,小部件和变量分类到一个类中。
看起来我和变量类有冲突。所以我尝试在我的类中设置变量为'global',并使用变量函数。但是这似乎也不起作用。
我可以去把它们全部改写成我想的框架,但我只是想问问,如果有人有一个快速修复,他们可以想到这里。 (我也不知道什么时候这个家伙可以帮我解决问题,如果问题出现了)
如果我的问题不恰当,或者某种程度上不允许,告诉我,明天当我起床。很抱歉,如果它不好。
我有代码在这里:
# [Importing Modules]
from tkinter import *
import os
import threading
#_________________| Setting Variables
global textlimiter
textlimiter = 0
#____________| Defining Functions
def CONVERT():
chatbox.insert(INSERT,"You: "+USER_ENTRY.get()+ "\n")
INPUT_BOX.set("")
global textlimiter
textlimiter += 1
#_______| Creating Window |
chat = Tk()
chat.title("Net Send Client [0.4]")
chat.geometry('550x500+200+200')
#________| Title |
title = StringVar()
title.set("Net Send Chat\n Type in box to send.")
title_widget = Label(chat,textvariable = title, height = 4)
title_widget.pack()
#_______________________| User Input Box|
INPUT_BOX = StringVar()
USER_ENTRY = Entry(chat,textvariable = INPUT_BOX)
USER_ENTRY.pack(side=TOP, padx = 10, pady = 20)
#___________________________________________________________________| Send Button|
send_button = Button(chat, text="Send",width = 20, command = CONVERT)
send_button.pack(padx = 10, pady = 10)
#_______________________________________________________| Text Box Widget |
chatbox = Text(width = 60, height = 15, relief = SUNKEN)
left = Frame(chatbox)
right = Frame(chatbox)
s_start = Scrollbar(right)
s_start.pack(side=RIGHT)
chatbox.grid(row = 0, column = 0, columnspan = 3)
chatbox.pack()
#__________________________________________| Chat Wizard Checks Text Limit|
class Chatwizard(threading.Thread):
def Chatmonitor():
global textlimiter
if textlimiter >= 15:
chatbox.set(None)
chatbox.insert(INSERT,"Console: Limit Reached, Chat Wiped" + "\n")
Chatwizard.start
chat.mainloop()
正如你可以看到我已经尽我的变量设置为全球,但似乎没有任何改变。
如果您尝试运行该程序,请记住您需要输入并发送15次,才能擦除聊天窗口。
谢谢你看看,如果你这样做。我现在真的有点难过。
'Chatwizard.start'缺少末括号。如果你想运行线程,它应该是'Chatwizard.start()'。 'Thread's需要定义'run()'方法。既然你没有'run()'方法,即使你启动了线程,它也不会执行任何操作。 – 2013-03-17 21:52:37