2014-02-06 120 views
0
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,但如果你做下面的代码Tkinter的网格和框架没有调整大小框架

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

在那里我没有作出第一码不起作用的宽度和高度

+1

我不知道是什么原因造成的问题,但我会用't = [self.frame,self.input_text]替换't = ['frame,input_text']' '和'我()'的eval语句。此外,你不需要Python中的分号。这是unpythonic。 – arkocal

+0

你的问题很难理解。这两个例子都不能像你想要的那样工作,或者只有第一个例子? –

回答

2

我不知道你正在尝试做的。在代码中出现了几个错误。第一个问题是,正如问题中所写的那样,它根本不运行。你错过了一个导入语句,并且你的缩进被搞砸了。

在你给所述框架的宽度和高度的第一个例子。但是,框架的默认行为是自动调整大小以适应其所有子项。这就是所谓的几何传播因此,该框架将缩小到只是大到足以容纳输入构件。

如果你想在框架200个像素高,你需要把几何传播关闭宽保持在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) 
+0

感谢您的回答,解决了我的问题,如果框架符合不符合高和高的内容,请尝试您告诉我的内容。 – Francisco

相关问题