2017-07-24 126 views
0

所以我抓住了一個網站上的事件鏈接,並將它們放入一個下拉菜單中進行選擇。我的菜單代碼:更改tk選項菜單中單個單詞的顏色?

import Tkinter as tk  
from Tkinter import StringVar 

selectMenu = tk.Tk() 


# #-> this is what I have 
# Followed by what you can use 


#var = Vars() 
#events = var.GetVars('Event') 
events = " " 
options = [] 
links = [] 
#forms = (driver.find_elements_by_class_name("with-cats")) #This is what I have 
forms = ["Yolo ","Dad? Closed","Anotha One","Normies! Closed"] #This is so you can try it for yourself 

for x in forms: 
    #info = x.text 
    info = x #Again, this is so you can try it for yourself 
    if events in info.lower(): 
     links.append(x) 

for link in range(0,len(links)): 
    #options.append(links[link].text) 
    options.append(links[link]) 
list(set(options)) 

selection = [] 
for link in range(0,len(options)): 
    selection.append(options[link]) 
select = StringVar(selectMenu) 
select.set("--None Selected--") 

menu = tk.OptionMenu(selectMenu, select, *(selection)) 

msg = "Which one would you like to attend?" 
label = tk.Label(selectMenu, text=msg, font="Helvedica 14") 

label.pack(side='top', pady=10) 
menu.pack(side="top", pady=10)  

selectMenu.attributes('-topmost', True) 
selectMenu.mainloop() 

所以此工程罰款和花花公子,但我想改善一下,以使其更明顯的事件是開放的。爲了澄清,發現一個事件被打開並放入菜單可能看起來像「這是一個很酷的事件」,但是一個被關閉的事件將被視爲「這是一個很酷的事件已關閉」。我的目標是能夠使前景變成紅色,不管是Closed還是包含Closed的字符串(如果有可能的話)(我不確定是否可能,因爲osx上的菜單和按鈕通常默認爲系統設置,也許有辦法解決這個問題?)。

  Current:      Desired: 

+0

請提供[最小,完整的,並且可驗證示例](https://stackoverflow.com/help/mcve)。這將使我們能夠協助你解決問題。沒有足夠的代碼來重現問題。沒有MCVE,它將不太可能獲得您正在尋找的答案。 –

+0

對不起,我很困惑,想要製造什麼問題?你能澄清一下嗎? – Jake

+0

問題是你想弄清楚如何改變一個單詞或包含該單詞的字符串的顏色,是否正確? –

回答

1

找到了解決方案!在MenuButton中使用Menu與Tkinter創建MenuOptions的方式相同,我可以創建一個自定義的MenuOption。如果您想添加更多選項,則可以使用menbutton.configure()選項編輯按鈕,並使用menbutton.menu編輯菜單項。

import Tkinter as tk  
from Tkinter import Menu, Menubutton 

class Vars(): 

    global vari 
    vari = {} 

    def GetVars(self, var): 

     return vari.get(str(var)) 

    def SendVars(self, var, val): 

     vari[str(var)] = val 


class App(): 

    def buttselect(self, link, menbutton, selectMenu): 
     var = Vars() 
     var.SendVars("Selection", link) # Store selected event 
     menbutton.configure(text=link) # Set menu text to the selected event 

    def prnt(self, link): 
     var = Vars() 

     print var.GetVars("Selection") # Print event 

    def __init__(self, selectMenu): 
     events = " " 
     options = [] 
     links = [] 
     forms = ["Yolo ","Dad? Closed","Anotha One","Normies! Closed"] #This is so you can try it for yourself 

     menbutton = Menubutton (selectMenu, text="--None Selected--", relief="raised") 
     menbutton.grid() 
     menbutton.menu = Menu (menbutton, tearoff=0) 
     menbutton["menu"] = menbutton.menu 

     #Get a list of event names 
     for x in forms: 
      info = x #Again, this is so you can try it for yourself 
      #If desired event keyword is in an event name, add it to the correct links 
      if events in info.lower(): 
       links.append(x) 

     #Remove duplicates 
     for link in range(0,len(links)): 
      options.append(links[link]) 
     list(set(options)) 

     #Final list of event names turned into menu commands 
     for link in options: 

      if "Closed" in link: 
       menbutton.menu.add_command(label= link, command= lambda link=link: self.buttselect(link, menbutton, selectMenu), foreground='red') 
      else: 
       menbutton.menu.add_command(label= link, command= lambda link=link: self.buttselect(link, menbutton, selectMenu)) 

     b = tk.Button(selectMenu, text="Selection", command= lambda link=link: self.prnt(link)) #Print selected event 
     b.pack() 

     msg = "Which one would you like to attend?" 
     label = tk.Label(selectMenu, text=msg, font="Helvedica 14") 

     label.pack(side='top', pady=10) 
     menbutton.pack(side="top", pady=10)  


selectMenu = tk.Tk() 
selectMenu.attributes('-topmost', True) 
app = App(selectMenu) 
selectMenu.mainloop() 

這導致所希望的準確的結果:

1

據爲OptionMenuherehere我不認爲文檔有設置文本的顏色的方法。

您或許可以通過使用listBox來獲得您想要的東西。有關listBox示例,請參閱文章here

+0

謝謝你嘗試,我也認爲listBoxs,但他們總是覺得太笨重,通常不值得犧牲極簡主義定製。 – Jake

+1

你可以考慮創建你自己的OptionMenu。它可能需要一些代碼,但最終你會有一個自定義的OptionMenu,能夠做你設計它的任何事情:)。我必須對滾動條做同樣的事情,因爲你不能改變windows中tkinters滾動條的顏色。所以我做了我自己的,所以我可以。 –

+0

有趣的是,你是否只是通過自己的類來模擬Tkinter.py中的類,但使用自定義更改來做到這一點? – Jake