[英]changing colour of ttk.Progressbar elements in the xpnative theme - python
我正在使用python 2.7和TK來制作一個gui,該gui可以訪問文本文件並使用其中的數據來完成許多事情,但是此處涉及的一個是發送gchat消息。 目前,我可以正常工作了,需要幫助的地方是調用模塊發送消息時,消息可以完美發送,盡管我希望用戶可以指示該過程正在發生,所以我創建了一個ttk 。進度條。 但我想在此方面做一些改進:
1)我想更改實際欄的外觀,在查看源文件時,我看不到任何選項,當我用Google搜索問題時,我唯一能找到的解決方法是更改源代碼,可以肯定,這只會在運行我的文件時更改它,然后在用戶運行它時才是標准設置? 最好,我希望條形圖是透明的,盡管藍色可以工作,但我已經看到有些人在窗戶機器中將藍色作為一種狀態,窗戶是我主要關心的問題,因此,如果可以說,窗戶中的藍色是本地其他地方,那會很好。
2)希望這個更簡單一些,但是當按下按鈕時,它會取自用戶輸入的值,這些值仍然可以更改,也許是改變函數的結果,總之可以停止所有輸入到tk窗口的操作,然后功能完成后可以繼續嗎?
以下是我到目前為止所擁有的,謝謝您的幫助
self.progressbar = ttk.Progressbar(self.gcTableButtonsFrame, length = 70, orient=HORIZONTAL, mode ='determinate')
self.progressbar.grid(column = 0, row = 0, sticky = 'n s')
#we then pass through the extension and the string 'test' through this fnction from the gchat module which will then send a
#gchat message to the extension passed through
self.bytes = 0
self.maxbytes = 0
self.start()
self.t = thread.start_new_thread(gchat.sendGChatMessage,(text, "test"))
except IndexError:
tkMessageBox.showinfo("Invalid Entry", "Please first select an Entry to send to")
def start(self):
self.progressbar["value"] = 0
self.maxbytes = 50000
self.progressbar["maximum"] = 50000
self.read_bytes()
def read_bytes(self):
'''simulate reading 500 bytes; update progress bar'''
selection2 = self.gcTable.selection()
self.bytes += 700
self.progressbar["value"] = self.bytes
if self.bytes < self.maxbytes:
# read more bytes after 100 ms
Tk.after(self.mainPyWindow, 100, self.read_bytes)
else:
tkMessageBox.showinfo("Message Sent", "A GChat message has been sent to " + self.gcTable.item(selection2, 'values')[1])
self.progressbar.destroy()
您的第一個問題有點模棱兩可,因為我不確定您是在談論控制進度條的外觀還是所顯示進度的性質。
進度條的性質是通過其值和其mode
選項控制的( determinate
進度條與indeterminate
的進度條不同;前者是通過value
控制的,后者只是表明“正在發生”)。
進度條的外觀由整體主題控制。 在Windows和Mac OS X上,默認主題是system主題,這意味着進度條將看起來是本地的, 無論是什么 。 我最近沒有在Linux上嘗試過主題,所以我忘記了那里的主題。 切換主題:
# Switch to the included 'clam' theme
s = ttk.Style()
s.theme_use('clam')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.