【问题标题】:tkinter grid and frame no resize frametkinter 网格和框架没有调整框架大小
【发布时间】:2014-02-06 23:15:16
【问题描述】:
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();

代码看起来不错,但框架不符合指示的 dedida,但如果符合,请在以下代码中

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()

我未能使第一个代码的宽度和高度不起作用

【问题讨论】:

  • 我不知道是什么导致了这个问题,但我会将t = ['frame, input_text'] 替换为t = [self.frame, self.input_text] 并将eval 语句替换为i()。此外,您在 python 中不需要分号。这是unpythonic。
  • 你的问题很难理解。这两个示例都无法按您的意愿工作,还是只有第一个?
  • 接下来,您可以在提交之前阅读您的问题名称吗?这是一个经过深思熟虑的问题,但标题真的很难找到。

标签: python grid tkinter frame


【解决方案1】:

我不知道你想做什么。代码中有几处出现错误。第一个问题是,正如问题中所写,它根本不运行。您缺少导入语句,并且您的缩进搞砸了。

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

如果您希望框架保持 200 像素宽 x 200 像素高,您需要关闭几何传播。你可以这样做:

self.f.grid_propagate(False)

这很少是推荐的做事方式,但如果您真的希望框架具有某种特定的尺寸,这是一种方法。

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

def frame(self):
    self.f = Tkinter.Frame(self,width=200,height=200,bg='cyan');
    self.f.grid(row=0,column=0, sticky="nsew");
    self.grid_rowconfigure(0, weight=1)
    self.grid_columnconfigure(0, weight=1)

【讨论】:

  • 谢谢你的回答,解决了我的问题,如果框架适合的内容不符合高高在上,试试你告诉我的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多