2017-07-19 72 views
0

我有一個GUI,我試圖擺放出來,所以屏幕上的文字被添加到填充屏幕在每個方向,但只能達到root.geometry('300x600')的大小包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 e:print(root.geometry()))' – Novel

+0

我希望OutWidget是寫入文本的地方,大小作爲整體窗口。對我而言,它遠遠超過了框架的寬度。所以,我必須調整窗口的大小才能看到滾動條或OutWidget文本窗口的邊緣。 – ProfessionalNameForDisplayHere

回答

1

您明確將OUtWidget設置爲fill='none', expand=False。但是,從你的描述你想要的:

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

您需要先從一個小文本窗口,因爲它只會擴大,不會縮小:

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

,並確保您的包含幀做同樣的:

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

指定窗口的大小是沒有意義的,因爲這些設置一旦被打包就會被覆蓋。

+0

我試着設置side = 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

爲了讓您的答案對本網站可行,您最好_explain_如何解決問題,而不是簡單地發佈盲目代碼。 –