为什么tkinter框架的大小与带有网格方法的Tk窗口的大小不同?

时间:2020-03-05 11:32:58

标签: tkinter

我在这里可能有些昏暗,但是我无法弄清楚为什么在调整窗口大小和Grid方法时,这个简单脚本中的ttk.Frame小部件没有随Tk窗口一起增长用来?我不希望图像的ttk.Label默认情况下会随着窗口的大小而变化。但是,考虑到使用方法rowconfigurecolumnconfigure,如果窗口大于标签,我期望标签周围会出现粉红色(框架的背景色)。我的错误在哪里?

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-

import tkinter as tk
import tkinter.ttk as ttk
from PIL import Image, ImageTk 

IMAGE = './images/test.jpg'


class App( ttk.Frame ):

    def __init__( self, master, **kwargs ):
        self.master = master

        super().__init__( master, style='app.TFrame', **kwargs  )

        photo = ImageTk.PhotoImage( Image.open( IMAGE ) )
        self.screen = ttk.Label( self, image=photo, style='app.TLabel' )
        self.screen.image = photo
        self.screen.grid( row=0, column=0, sticky='nsew' )


def init_ttkStyle():
    '''Initialize ttk widget styles.'''
    s = ttk.Style()            
    s.configure( 'app.TFrame', background='pink' )
    s.configure( 'app.TLabel', background='cyan', borderwidth=10, relief='ridge' )
    return s


def main():
    ROOT = tk.Tk()
    appStyle = init_ttkStyle()
    app = App( ROOT )
    app.grid( row=0, column=0, sticky='nsew' )  # ?
    app.columnconfigure( 0, weight=1 )          # ?
    app.rowconfigure( 0, weight=1 )             # ?
    #app.pack( expand=1, fill='both' )            #this works
    ROOT.mainloop()


if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:1)

appFrame小部件。在rowconfigure小部件上使用columnconfigureFrame时,它将按照您的规范进行网格化, root窗口不会。它已在.packexpand明确告知fill整个root窗口的情况下适用。{p>

要使其以类似的方式工作,请在rowconfigure上执行columnconfigureroot