16

デフォルトの「ボックスのような」アイコンを tkinter OptionMenu から削除し、独自の画像ファイルに置き換えようとしています。以下は、私がこれまでに持っているコードです。動作していますが、矢印の画像を表示して OptionMenu を機能させるには、最後の行を追加する必要がありました。ただし、矢印のイメージは常に OptionMenu の右端ではなく、テキストの直後にあり、スティッキーは継ぎ目が適用されないため、幅 = 140 です。私はPython 2.6で作業しています。

画像を右に移動するための提案はありますか?

デフォルト 私が得ているもの

...
arrow = PhotoImage(file='arrow.gif')
om = OptionMenu(root,myVar,*myOptList)
om.grid(sticky=W+E,padx=5,pady=5)
om.config(indictoron=0,compound='right',image=arrow,width=140)
om.image=arrow
...
4

4 に答える 4

6

ttk.Combobox代わりにウィジェットを使用できます。

om = Combobox(root, values=*myOptList)
om.set(myVar)
om.grid(sticky=W + E, padx=5, pady=5)
om.config(compound='right', width=140)
于 2016-03-22T22:46:50.630 に答える
3

インジケーターをオフにして、属性を使用しないようにすることができます。compound境界線やテキストを含まず、画像を含むラベルとして矢印を作成します。を使用placeして、ボタンの右端にラベルを配置できます (relx属性を使用)。placeこれは本当に得意なタイプです。

于 2015-10-15T02:22:26.690 に答える
2

それはうまくいかず、残念なことに、簡単な解決策がわかりません。ここでの主な問題は、OptionMenu が複合ウィジェットであることです。これは Menubutton (皮肉なことに、tkinter ソースでは非推奨/廃止とマークされています) の子孫であり、メニューウィジェットが含まれています。

使用している画像オプションは、ラベルテキストと一緒にパックされており、レイアウト構成の試みによって「切り離される」ことはありません。より健全なアプローチは、無効にしたインジケーターウィジェット/表現に影響を与えることですIndicatorOn=0。しかし、インジケーターが何であるかを理解できないため、運もありません...

ところで、どういうわけかそれはひどいハックのように見えます:

class OptionMenu(Menubutton): 
"""OptionMenu which allows the user to select a value from a menu.""" 
    def __init__(self, master, variable, value, *values, **kwargs):
    ...
    #'command' is the only supported keyword  <--- lol?! WTF?! why?
              callback = kwargs.get('command') 
              if kwargs.has_key('command'): 
                  del kwargs['command'] 
              if kwargs: 
                 raise TclError, 'unknown option -'+kwargs.keys()[0] # yeah sure! - unknown my a** 8-/

tkinterのソースを見て、の. これが、「初期化」の後に 2 行目を追加する必要がある理由でもあります。

om.config(indictoron=0,compound='right',image=arrow,width=140)

あなたが見つけるかもしれない本物の情報源では、ボタンがある種のラジオボタンであることについての最初の予感は、それほどフィールドから外れているわけではありませんが、tkinterの問題を解決するのに(少なくとも私は)役に立ちません。:-(

申し訳ありませんが、これ以上役に立ちませんでした....恥を知れ!:( でも、次はもっと頑張るよ! ;-)

于 2012-11-07T21:23:03.427 に答える