Python tkinter网格和框架没有调整框架大小

Python tkinter网格和框架没有调整框架大小,python,grid,tkinter,frame,Python,Grid,Tkinter,Frame,代码看起来很好,但框架不适合指定的dedida,如果符合,则在下面的代码中 class input_data(Tkinter.Tk): def __init__(self): Tkinter.Tk.__init__(self); self.resizable(width=False,height=False); self.geometry('500x500'); t = ['frame','input_text'];

代码看起来很好,但框架不适合指定的dedida,如果符合,则在下面的代码中

class input_data(Tkinter.Tk):
    def __init__(self):
        Tkinter.Tk.__init__(self);
        self.resizable(width=False,height=False);
        self.geometry('500x500');
        t = ['frame','input_text'];
        for i in t:
            eval('self.'+i+'()');
def frame(self):
    self.f = Tkinter.Frame(self,width=200,height=200,bg='cyan');
    self.f.grid(row=0,column=0);

def input_text(self):
    self.e = Tkinter.Entry(self.f);
    self.e.grid(row=0,column=0);  

root = input_data();
root.mainloop();

当我无法生成第一个代码时,它的宽度和高度都不起作用

我不知道您想做什么。代码中有几处似乎是错误的。第一个问题是,如问题中所述,它根本不运行。您缺少一条导入语句,缩进混乱

在第一个示例中,您为框架指定了宽度和高度。但是,框架的默认行为是自动调整大小以适应其所有子项。这称为几何体传播,因此,帧将缩小到刚好足以容纳entry小部件的大小

如果希望帧保持200像素宽x 200像素高,则需要禁用几何体传播。您可以通过以下方式执行此操作:

import Tkinter as tk

class SimpleApp(object):
    def __init__(self, master, **kwargs):
    title = kwargs.pop('title')
    frame = tk.Frame(master, borderwidth=5, bg = 'cyan', **kwargs)
    frame.grid()
    button = tk.Button(frame, text = title)
    button.grid(sticky = tk.SE)
    frame.rowconfigure('all', minsize = 200)
    frame.columnconfigure('all', minsize = 200)

def basic():
    root = tk.Tk()
    app = SimpleApp(root, title = 'Hello, world')
    root.mainloop()
basic()
这很少是推荐的方法,但是如果您真的希望框架精确到某个特定的大小,这是一种方法

如果不希望它是精确的大小,而是希望它填充整个窗口,则需要使用
grid
命令中的
sticky
选项,并为第0行和第0列设置非零权重。例如:

self.f.grid_propagate(False)

我不知道你想做什么。代码中有几处似乎是错误的。第一个问题是,如问题中所述,它根本不运行。您缺少一条导入语句,缩进混乱

在第一个示例中,您为框架指定了宽度和高度。但是,框架的默认行为是自动调整大小以适应其所有子项。这称为几何体传播,因此,帧将缩小到刚好足以容纳entry小部件的大小

如果希望帧保持200像素宽x 200像素高,则需要禁用几何体传播。您可以通过以下方式执行此操作:

import Tkinter as tk

class SimpleApp(object):
    def __init__(self, master, **kwargs):
    title = kwargs.pop('title')
    frame = tk.Frame(master, borderwidth=5, bg = 'cyan', **kwargs)
    frame.grid()
    button = tk.Button(frame, text = title)
    button.grid(sticky = tk.SE)
    frame.rowconfigure('all', minsize = 200)
    frame.columnconfigure('all', minsize = 200)

def basic():
    root = tk.Tk()
    app = SimpleApp(root, title = 'Hello, world')
    root.mainloop()
basic()
这很少是推荐的方法,但是如果您真的希望框架精确到某个特定的大小,这是一种方法

如果不希望它是精确的大小,而是希望它填充整个窗口,则需要使用
grid
命令中的
sticky
选项,并为第0行和第0列设置非零权重。例如:

self.f.grid_propagate(False)

我不知道是什么原因导致了这个问题,但我将用
t=[self.frame,self.input\u text]
替换
t=[frame,input\u text]
,并用
I()替换eval语句。此外,python中不需要分号。你的问题很难理解。这两个例子都不能像你所希望的那样工作,还是仅仅第一个?接下来,你能在提交之前阅读你的问题名称吗?这是一个经过深思熟虑的问题,但标题确实很难找到。我不知道问题的原因,但我将用
t=['frame,input_text']
替换
t=[self.frame,self.input_text]
,并用
I()
替换eval语句。此外,python中不需要分号。你的问题很难理解。这两个例子都不能像你所希望的那样工作,还是仅仅第一个?接下来,你能在提交之前阅读你的问题名称吗?这是一个经过深思熟虑的问题,但标题让人很难找到。谢谢你的回答,这解决了我的问题,如果框架适合的内容与上面的内容不符,试试你告诉我的。谢谢你的回答,这解决了我的问题,如果框架与上面的内容不一致,请尝试你告诉我的内容。