【问题标题】:Resizing in a grid manager tkinter在网格管理器 tkinter 中调整大小
【发布时间】:2018-04-05 16:29:34
【问题描述】:

使用 tkinter,我想制作一个包含左侧几个按钮的界面,这将是相当静态的,并且与右侧的小部件很好地对齐。 在右侧,我想要一个位于 Text 小部件上方的 Entry 小部件,这两个小部件都会相应地调整大小(Entry 小部件仅在 X 轴上)。

此代码完成了大部分工作,除了 Text 小部件不调整大小并且 Entry 小部件仅调整大小以与 Text 小部件对齐。在尝试对根进行列/行配置时,顶部框架会笨拙地调整大小。

这是来自这段代码的 tkinter 界面图片:

from tkinter import *

def main():
    root = Tk()
    root.geometry("300x400")

    framet = Frame(root)
    frameb = Frame(root)

    framet.grid(row=0, column=0, sticky='ew')
    frameb.grid(row=1, column=0, sticky='news')

    button1 = Button(framet, text='one', width=8)
    button1.grid(row=0, column=0)

    button2 = Button(frameb, text='two', width=8)
    button2.grid(row=1, column=0, sticky='n')

    entry1 = Entry(framet)
    entry1.grid(row=0, column=1, sticky='ew')

    text1 = Text(frameb, highlightbackground='black', highlightthickness=1)
    text1.grid(row=1, column=1, sticky='news')

    framet.columnconfigure(1, weight=1)

if __name__ == '__main__':
    main()

如您所见,Entry 和 Text 小部件不会调整大小。我怎样才能做到这一点,同时仍然让按钮保持静止,不移动任何东西(仅调整大小)?

【问题讨论】:

    标签: python python-3.x tkinter widget tkinter-layout


    【解决方案1】:

    这对你有用吗?我用# cmets 更改了行,我想,我真的不记得我做了什么我只是试图让它工作,但我不满意的一个问题是条目小部件的高度与按钮,我猜你可以手动设置它的高度,但是..

    from tkinter import *
    
    def main():
        root = Tk()
        root.grid_columnconfigure(1,weight=1) # the text and entry frames column
        root.grid_rowconfigure(0,weight=1) # all frames row
    
        buttonframe = Frame(root)
        buttonframe.grid(row=0, column=0, sticky="nswe")
        entry_text_frame = Frame(root)
        entry_text_frame.grid(row=0, column=1, sticky="nswe")
        entry_text_frame.grid_columnconfigure(0,weight=1) # the entry and text widgets column
        entry_text_frame.grid_rowconfigure(1,weight=1) # the text widgets row
    
        button1 = Button(buttonframe, text='one', width=8)
        button1.grid(row=0, column=0, sticky='nswe')
        button2 = Button(buttonframe, text='two', width=8)
        button2.grid(row=1, column=0, sticky='nswe')
    
        entry1 = Entry(entry_text_frame)
        entry1.grid(row=0, column=0, sticky='nswe')
    
        text1 = Text(entry_text_frame, highlightbackground='black', highlightthickness=1)
        text1.grid(row=1, column=0, sticky='news')
    
        root.geometry("300x400")
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

    • 如果您解释您所做的不同之处,这个答案会更好。否则,我们必须逐行阅读以找出重大变化是什么。另外,什么时候调用geometry 命令也没关系。
    • @BryanOakley 谢谢,在过去的几个月里,您对 tkinter on stack 的解释确实帮助了我。你正在帮助很多人学习 Python 中的 GUI 开发
    • 是的,我喜欢将 Bryan 视为无所不知的不眠不休的 AI。
    猜你喜欢
    • 2021-01-22
    • 2023-03-03
    • 2018-12-19
    • 2017-04-07
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多