繁体   English   中英

打包tkinter窗口扩展到框架之外

[英]Pack tkinter window expanding past frame

我正在尝试布局一个GUI,因此添加了屏幕单词以填充各个方向的屏幕,但只能达到root.geometry('300x600')的大小

取而代之的是,它的扩展范围远远超出了框架的宽度。 有什么方法可以调整大小,以便正确包装吗? 到目前为止,我已经尝试了很多无效的方法。

编辑:要查看整个文本和滚动条,我必须设置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()

这是我想要的样子,除了一直填充到底部 这就是我想要的样子,只是一直延伸到最底端

您将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)

指定Window的大小是没有意义的,因为一旦将任何内容打包到其中,这些设置就会被覆盖。

使用<window/parent>.resizable(width=False, height=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM