2017-07-29 9 views
5

この問題はほとんど私を熱狂させる。私は新しい初心者で、tck/tkの知識はありません。私はインターネットで慎重に検索したが、良い解決策を見いだせなかった。ttkウィジェットのすべてのスタイルオプションを知る方法

例えば、私はその後、私はフレームのスタイルを設定する必要が

import tkinter as tk 
from tkinter import ttk 
newBT = ttk.LabelFrame(width=100, height=100) 

を使用してラベルのフレームを作成しました。 の前景はtk.LabelFrameです。しかし、私はのttk.LabelFrameのスタイルオプションは、NMTtck/tkというリファレンスでは見つかりませんでした。その後、私は

s = ttk.Style() 
s.configure('TLabelframe', foreground='red') 

を以下のように、推測する必要がしかし、これは動作しません、the right thingだから

s.configure('TLabelframe.Label', foreground='red') 

で、私の質問は、どのように私はすべてのスタイルのオプションを見つけることができているTTKウィジェットがあり。

s.getAllOptions('TLabelframe') 

のようないくつかの機能があり、その後、出力は感謝

['background', 'foreground', 'padding', 'border', ...] 

のようなものです!

+1

私は解決策を見つけると思います。まず、このウィジェットのすべての要素を見つけるために 's.layout( 'TLabelframe')'を使います。次に、 's.element_options( 'element name')'を使って利用可能なすべてのオプションを調べます。残念ながら、** TLabelframe.Label **は 's.layout( 'TLabelframe')がこれを出力しないので、** TLabelframe.Label **を取得する方法を見つけられませんでした。それはttk.Labelframeの要素ではないようです。 –

+1

私は似たようなものを探しています。パラメータなしで 'widget.configure()'コールを使用し、その名前でスタイルを見つけるプロパティのリストを取得できるようです。名前スタイルを使用すると、tkスタイルを作成して色を取得できます。私はそのようにしようとしている – madtyn

+1

ありがとうmadtyn。あなたは引数なしで.configure()が正しいとあなたにプロパティと現在の設定を教えてくれます。しかし、それはあなたが設定できるスタイルを与えることはありません。 –

答えて

2

本当に詳細にスタイルを制御したい場合は、レイアウトを使用する必要があります。だから、最初に使用したウィジェットクラスを識別します。

>>b=ttk.Button(None) 
>>b.winfo_class() 
'TButton 

その後、最後にあなたが欲しいものを変更

>>> s.layout('TButton') 
[("Button.border", {"children": [("Button.focus", {"children": 
[("Button.spacing", 
{"children": [("Button.label", {"sticky": "nswe"})], "sticky": "nswe"})], 
"sticky": "nswe"})], "sticky": "nswe", "border": "1"})] 

のコマンドを使用します。

s.layout("MYButton.TButton",[("Button.border", {"children": 
[("Button.focus", {"children": [("Button.spacing", {"children": 
[("Button.label", {"sticky": "nswe"})], "sticky": "nswe"})], "sticky": 
"nswe"})], "sticky": "we", "border": "1"})] 

は、これは私のためのトリックを行い、最終的に私の提供私のttkウィジェットを制御する方法!

ルカ

+0

これは私の質問に対する良い答えです。 BTWでは、 's.element_options()'では、レイアウト要素にどのようなオプションを設定できるかを見ることができます。 –

2

私は自分自身に同じ質問をしていたが、今まではそれに対処するための時間を見つけていないように私はあなたの質問が面白い発見しました。私はこれを行うにはstylename_elements_options(stylename)という関数を書いています。ここでそれを共有する。それはあなたに恩恵を受けることを願っています(6ヶ月遅れていますが)と同じ質問をしているtkinterユーザー。

スクリプト:

import tkinter as tk 
import tkinter.ttk as ttk 

def stylename_elements_options(stylename): 
    '''Function to expose the options of every element associated to a widget 
     stylename.''' 
    try: 
     # Get widget elements 
     style = ttk.Style() 
     layout = str(style.layout(stylename)) 
     print('Stylename = {}'.format(stylename)) 
     print('Layout = {}'.format(layout)) 
     elements=[] 
     for n, x in enumerate(layout): 
      if x=='(': 
       element="" 
       for y in layout[n+2:]: 
        if y != ',': 
         element=element+str(y) 
        else: 
         elements.append(element[:-1]) 
         break 
     print('\nElement(s) = {}\n'.format(elements)) 

     # Get options of widget elements 
     for element in elements: 
      print('{0:30} options: {1}'.format(
       element, style.element_options(element))) 

    except tk.TclError: 
     print('_tkinter.TclError: "{0}" in function' 
       'widget_elements_options({0}) is not a regonised stylename.' 
       .format(stylename)) 

stylename_elements_options('my.Vertical.TScrollbar') 
+0

これは本当に役に立ちます –

関連する問題