2017-10-17 24 views
1

私のGUIにはttk.Optionmenu()が使用されていますが、マウスオーバー状態ではメニュー/ボタンに境界線が表示されません。このウィジェットの特定のスタイリングを変更できるかどうかは、element_optionsを私に与えているわけではありません。ttk.OptionMenuにアウトライン/枠線がありません

ボタンがフォーカスのときだけでなく、ボタンのように見えるようにする方法があれば、私はそれが大好きです。そうでなければ、それはまあまあのようです。

import tkinter as tk 
from tkinter import ttk 

root = tk.Tk() 

var = tk.StringVar(root) 
opmenu = ttk.OptionMenu(root, var, 'One', 'Two', 'Three') 
opmenu.pack() 

root.mainloop() 

私はウィジェットのstyleを変更する方法を知っているが、どれもその休止時の外観に対処していません。私は解決策を見つけることを望んで「グーグル・グーグル」を試みたが役に立たなかった。 Pythonの3.5.2を使用して 8.6

+0

問題の原因はあまり明確ではありません。 Linux上でコードをテストすると、ボタンと似たような外観が得られます。あなたは偶然窓を使用していますか? – kogito

+0

はい私は窓を使用しています...申し訳ありません。私はその質問に言及するのを忘れました。 –

+0

[documentation](http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Menubutton.html) tkinter OptionMenuの一般的な設定可能な機能の多くは、ttkでは使用できません。 ttk OptionMenuのスタイル名はTMenubuttonであることに注意してください。 –

答えて

1

更新のTkinter:あなたは離れて窓から主張するスタイルを強制することができるように見える掘りいくつかの後

。しかし、私はあなたがtheme_use('clam')

を使用した後、あなたが望む方法を見て自分のスタイルを設定することができるかもしれないと思うように良い見ていない、この例を見てみましょう:に応じて

import tkinter as tk 
from tkinter import ttk 

root = tk.Tk() 

var1 = tk.StringVar() 
var1.set("One") 

s = ttk.Style(root) 
s.theme_use('clam') 
s.configure('raised.TMenubutton', borderwidth=1) 

opmenu = ttk.OptionMenu(root, var1, "One", "One", "Two", "Three", 
         style = 'raised.TMenubutton') 

opmenu.pack() 

root.mainloop() 

をあなたはこのような何かを行うことができ、ポップアップメニューとボタンを使用してのあなたのコメント:

import tkinter as tk 
from tkinter import ttk 

root = tk.Tk() 

popup = tk.Menu(root, tearoff=0) 
popup.add_command(label="One", command= lambda: update_btn("One")) 
popup.add_command(label="Two", command= lambda: update_btn("Two")) 
popup.add_command(label="Three", command= lambda: update_btn("Three")) 

btn = ttk.Button(root, text="One") 
btn.pack() 

def update_btn(x): 
    btn.config(text=x) 

def btn_popup(event): 
    try: 
     popup.tk_popup(event.x_root, event.y_root, 0) 
    finally: 
     popup.grab_release() 

btn.bind("<Button-1>", btn_popup) 

root.mainloop() 
+0

ありがとうございました。あなたは実際に私の考えを実際に得ました。ただし、サンプルコードのような通常のボタンを使用するのではなく、オプションメニューボタンをマウスの上に移動させてからクリックします。それはコンテキストメニューを開くだろう...私はttkウィジェットを書く方法を学び、ちょうどそれを修正してコアコードを修正する方法を学ぶことが大好きです。 –

+0

@ErniePetersスタイルを強制する方法を見つけたので、私は自分の答えを更新しました。あなたはあなたが望む美的に合うようにスタイルを完全に設定する必要がありますが、OptionMenuを「上げた」状態に保つことができます。 –

+0

@ErniePetersしかし、私はボタンを使用してポップアップメニューを提供するあなたのアイデアはうまくいくはずだと思うので、多くの作業が必要になります。 –

0

私は永久にVistaのスタイルの境界を示すための解決策を見つけた:

import tkinter as tk 
from tkinter import ttk 

# Always show the active style 
def alwaysActiveStyle(widget): 
    widget.config(state="active") 
    widget.bind("<Leave>", lambda e: "break") 

root = tk.Tk() 

var = tk.StringVar(root) 
opmenu = ttk.OptionMenu(root, var, 'One', 'Two', 'Three') 
alwaysActiveStyle(opmenu) 
opmenu.pack() 

root.mainloop() 

私はそれがいくつかの問題を解決することを願っています。

関連する問題