2016-10-13 3 views
0

私はPython(2.7)で単純なインターフェイスを作成しようとしていますが、Tkinterはユーザー入力ボックス、ブラウズボタン、最初の行の説明と複数行の説明下の行にその幅にまたがっています。Tkinter - columnspanはメッセージに影響しないようです。

私の問題は、以下から分かるようにcolumnspanオプションは、私のMessageウィジェットは上記の3つの列の幅をまたがることができるように思われないということです。

Non-spanning message box

を私はこれを取得できますかMessageは全幅に及んでいますか?さらにwidthパラメータを使用してみましたが、これはEntryウィジェットのスケールとは異なると思われます。次のように

私のコードは次のとおり

from Tkinter import * 

class App(Frame): 

    def __init__(self, *args, **kwargs): 
     Frame.__init__(self, *args, **kwargs) 
     self.grid(sticky=N + W + E + S) 

     # set up labels and buttons 
     self.folder_text = Label(
      self, text='Select Folder: ', font='Arial 10', anchor=W 
     ) 
     self.folder_text.grid(row=0, column=0, sticky=W) 

     self.input_folder = Entry(
      self, width=40, font='Arial 10' 
     ) 
     self.input_folder.grid(row=0, column=1) 

     self.browse_button = Button(
      self, text="Browse", font='Arial 8 bold', 
      command=lambda: self.browse_for_folder(self.input_folder) 
     ) 
     self.browse_button.grid(row=0, column=2) 

     self.desc = Message(
      self, text='This tool will create a .csv file in the specified folder containing the Time and ' 
         'Latitude/Longitude (WGS84) for all TIFF, RAW and JPEG/JPG files contained in the ' 
         'folder with this information available.', font='Arial 8', anchor=W 
     ) 
     self.desc.grid(row=1, column=0, columnspan=3, sticky=E + W) 

     self.run_button = Button(
      self, text="Run!", font='Arial 10 bold', fg='red', 
      command=lambda: self.run(self.input_folder) 
     ) 

     self.run_button.grid(row=2, column=1) 

# ---SNIP--- 

root = Tk() 
root.bind('<Escape>', lambda e: root.destroy()) 
root.resizable(0, 0) 
root.title('Get photo geolocations') 

app = App(root) 
root.mainloop() 
+0

それは[組み込みのウ​​ィジェットタイプ](http://effbot.org/tkinterbook/message.htm) – asongtoruin

答えて

1

ウィジェットの背景色を変更すると、実際に複数の列にまたがることがわかります。

Messageウィジェットの主な特長は、幅が指定されていない場合、テキストが特定のアスペクト比を維持するようにテキストに改行を挿入することです。ウィジェットがその自然なサイズよりも広く作られている場合、ウィンドウのテキストは余分な水平スペースを埋めません。

幅を指定すると、縦横比は無視されます。 Labelとは異なり、幅は文字数を指します。は、ピクセルベース(または距離:インチ、センチメートル、ミリメートル、またはプリンタポ​​イント)のMessageです。

widthオプションを使用する簡単な方法は、ウィジェットの<Configure>イベントに結合し、ウィジェットの実際の幅(または幅マイナスマージンのために少し)

する幅オプションを設定することですたとえば

self.desc.bind("<Configure>", 
    lambda event: event.widget.configure(width=event.width-8)) 
+0

だ@MichelTouwこれは私がそれを必要とする正確にどのように動作し、おかげで非常に。 – asongtoruin

1

Messageはそのサイズを決定するために、アスペクト比や文字幅を使用します。

あなたはそれに幅を与えることができますし、それが動作します。また

self.desc = Message(
     self, text='This tool will create a .csv file in the specified folder containing the Time and ' 
        'Latitude/Longitude (WGS84) for all TIFF, RAW and JPEG/JPG files contained in the ' 
        'folder with this information available.', font='Arial 8', anchor=W, width = 400 
    ) 

enter image description here

、あなたがウィジェットの上に幅を設定し、ウィンドウをレンダリングroot.geometry()とその幅を読み出すことができ、その中にテキストを設定します。

関連する問題