2017-07-19 9 views
0

GUIをレイアウトしようとしていますので、スクリーン・ワードが各方向の画面を塗りつぶすように追加されていますが、root.geometry( '300x600')のサイズまでですPack tkinterウィンドウが過去のフレームに展開されます

代わりに、フレームの幅をはるかに超えて拡大しています。これは正しいサイズにするための方法はありますか?私はこれまでにはうまくいきませんでした。

編集:テキスト全体を表示するには、スクロールバーが、私はroot.geometryを設定する必要が( '684x418)

from tkinter import * 

class Rhapsody_Gui: 
    def __init__(self,root): 
     Window = Frame(root, width=200, height=200) 

     self.InWidget = Text(Window,bg='white',bd=3,fg='black',exportselection=0,height=1,wrap=WORD,insertofftime=0,insertbackground="white") 

     Window.pack() 
     self.InWidget.focus_set() 



     self.scroll = Scrollbar(Window, orient=VERTICAL) 
     self.OutWidget = Text(Window, yscrollcommand=self.scroll.set)#, height=30) 
     self.OutWidget.bind("<Button 1>",self.Select) 
     self.InWidget.bind("<Return>", self.Post) 
     myList = ['words', 'that', 'should', 'be', 'printed'] 
     for x in myList: 
      self.OutWidget['state'] = ['normal'] 
      self.OutWidget.insert(END, x +'\n') 

     self.scroll.config(command=self.OutWidget.yview) 
     self.InWidget.pack(side=TOP, fill='none') 
     self.OutWidget.pack(side=LEFT, fill='none', expand=False) 
     self.scroll.config(command=self.OutWidget.yview) 
     self.scroll.pack(side=RIGHT, fill=Y, expand=False)#, ipadx=5) 
     self.OutWidget['state'] = ['disabled'] 

    def Post(self,event): 
     text = self.InWidget.get(1.0,2.0) 
     self.InWidget.delete(1.0,2.0) 
     self.OutWidget['state'] = ['normal'] 
     self.OutWidget.insert('end',text) 
     self.OutWidget['state'] = ['disabled'] 
     return ("break") 

    def Select(self,event): 
     line_start = self.OutWidget.index("@%s,%s linestart" % (event.x, event.y)) 
     line_end = self.OutWidget.index("%s lineend" % line_start) 
     self.OutWidget.tag_configure("highlight", background="yellow") 
     self.OutWidget.tag_remove("highlight", 1.0, "end") 
     self.OutWidget.tag_add("highlight", line_start, line_end) 
     self.InWidget.focus_set() 
     return ("break") 

if __name__ == '__main__': 
    root = Tk() 
    root.geometry('300x600+600+100') 
    App = Rhapsody_Gui(root) 
    root.mainloop() 

これは、すべて満たされた以外、私は、それが見えるようにしたいものです下への道順 This is what I want it to look like, except extended all the way to the bottom

+0

テキストウィジェットをウィンドウに塗りつぶしたり、ウィンドウをテキストウィジェットのサイズに縮小する方法を尋ねていますか?ウィンドウは600x300で描画されます。この行を追加して、ジオメトリが変更されたことを確認します。 'root.bind( ''、lambda:print(root.geometry()))' – Novel

+0

テキストが書き込まれるOutWidgetを同じにします。全体のウィンドウとしてのサイズ私にとっては、フレームの幅をはるかに超えて目に見えないほど広がっています。だから、スクロールバーやOutWidgetテキストウィンドウの端を見るために、ウィンドウのサイズを大きくする必要があります。 – ProfessionalNameForDisplayHere

答えて

1

明示的にOUtWidgetをfill='none', expand=Falseに設定します。しかし、あなたの記述から、あなたが欲しい:

self.OutWidget = Text(Window, height=1, width=1, yscrollcommand=self.scroll.set) 

、あなたが含むフレームのために同じことを行うことを確認してください。

self.OutWidget.pack(side=LEFT, fill='both', expand=True) 

は、あなたはそれだけで、拡大縮小することはありませんので、小さなテキストウィンドウで始まる必要があります。

Window.pack(fill='both', expand=True) 

ウィンドウのサイズを指定するのは、何かがパックされるとすぐにオーバーライドされるため、無意味です。

+0

サイド= LEFT、fill = BOTH、expand = Trueを設定しようとしました。明らかに欠けていたのは、ウィンドウの高さ= 1、幅= 1に設定する必要があったことです。なんらかの理由で、ウィンドウが塗りつぶされて展開されていても、機能しません。なぜ高さと幅を明白に小さく設定する必要があるのか​​? – ProfessionalNameForDisplayHere

+0

@ProfessionalNameForDisplayHere私はそれをテストし、それは私のために働いた。あなたが今持っているコードであなたのOPを更新すれば、私は見てみましょう。 – Novel

+0

申し訳ありませんが、私のコメントは明確ではありませんでした。それは動作しますが、height = 1、width = 1も指定した場合に限ります。その部分がなければウィンドウは、GUIウィンドウの幅を超えて展開されます。 – ProfessionalNameForDisplayHere

-2

<window/parent>.resizable(width=False, height=True)を使用してください。

+1

あなたの答えをこのサイトで実行可能にするには、単純に盲目的なコードを投稿するのではなく、問題の解決方法を詳しく説明してください。 –

関連する問題