對不起,如果這是一個相當具體的問題,但讓我試着解釋一下。旨在刪除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