2014-02-13 44 views
0

由于某些原因,我能够在调整窗口大小时获得此TKinter帧(allValOuterFrame)以垂直和水平方向展开,但是看起来,该框架所持有的画布以及该画布内的框架和垂直滚动条只会水平展开。有人能解释为什么吗?Python TKinter:当窗口被调整大小时,框架和画布会水平扩展,但不是垂直扩展

这里是我的代码:

# At first I only had "from X import *" but then discovered that 
# it is bad practice, so I also included "import X" statements so 
# that if I need to use something from tk or ttk explicitly, I can, 
# but I had 2/3 of my code done at that point so I had to leave in the 
# "import *" things. 
try: 
    from Tkinter import * #python 2 
    import Tkinter as tk 
    from ttk import * 
    import ttk 
    import tkMessageBox as msg 
    import tkFileDialog as openfile 
except ImportError: 
    from tkinter import * #python 3 
    import tkinter as tk 
    from tkinter.ttk import * 
    import tkinter.ttk as ttk 
    from tkinter import messagebox as msg 
    from tkinter import filedialog as openfile 
import csv 
# My stuff: 
from extractor import Analysis 
from extractor import createDictionariesAndLists as getRawData 
from nitrogenCorrector import correct as nCorrect 
from carbonCorrector import correct as cCorrect 


(...) 


def createAllValWindow(self): 

    allValWindow = Toplevel(self) 
    allValWindow.grab_set() 

    if self.element == "N": 
     allValWindow.title("All Nitrogen Raw Data Values") 
    elif self.element == "C": 
     allValWindow.title("All Carbon Raw Data Values") 
    else: 
     allValWindow.title("All Raw Data Values") 

    allValOuterFrame = tk.Frame(allValWindow,background="#00FF00") 
    allValCanvas = Canvas(allValOuterFrame, borderwidth=0) 
    allValInnerFrame = Frame(allValCanvas, borderwidth=5) 

    def allValOnFrameConfigure(event): 
     allValCanvas.configure(scrollregion=allValCanvas.bbox("all")) 

    allValOuterFrame.grid_rowconfigure(0,weight=1) 
    allValOuterFrame.grid_columnconfigure(0,weight=1) 
    allValInnerFrame.grid_rowconfigure(0,weight=1) 
    allValInnerFrame.grid_columnconfigure(0,weight=1) 

    allValVertScrollbar = Scrollbar(allValOuterFrame, orient="vertical",command=allValCanvas.yview) 
    allValHorizScrollbar = Scrollbar(allValOuterFrame, orient="horizontal",command=allValCanvas.xview) 
    allValCanvas.configure(yscrollcommand=allValVertScrollbar.set, xscrollcommand=allValHorizScrollbar.set) 
    allValVertScrollbar.grid(row=1,column=12,sticky=N+S) 
    allValHorizScrollbar.grid(row=2,column=0,columnspan=12,sticky=E+W) 

    allValCanvas.grid(row=1,column=0,columnspan=12,sticky=N+S+E+W)  allValCanvas.create_window((4,4),window=allValInnerFrame,anchor="nw",tags="allValInnerFrame") 
    allValInnerFrame.bind("<Configure>",allValOnFrameConfigure) 
    allValDoneButton = Button(allValWindow,text="Done",command=allValWindow.destroy) 
    allValOuterFrame.pack(fill="both",expand=1) 
    allValDoneButton.pack() 

    textRows = [self.rawHeader] 
    textLabels = [[]] 
    numDiffAminos = len(self.analyses) - 1 # Ignore the "trash" list at the end 
    for singleAminoAnalyses in self.analyses[0:numDiffAminos]: # Once again, ignoring the last list 
     if len(singleAminoAnalyses) < 1: 
      continue 
     for analysis in singleAminoAnalyses: 
      textRows.append([str(analysis.analysisID), 
          str(analysis.row), 
          str(analysis.identifier1), 
          str(analysis.identifier2), 
          str(analysis.comment), 
          str(analysis.peakNumber), 
          str(analysis.rt), 
          str(analysis.component), 
          str(analysis.areaAll), 
          str(analysis.ampl), 
          str(analysis.r), 
          str(analysis.delta)]) 
      textLabels.append([]) 
    for i in range(len(textRows)): 
     if i == 0: 
      listRow = i 
     else: 
      listRow = i+1 
     for j in range(len(textRows[i])): 
      if i == 0: 
       textLabels[i].append(Label(allValInnerFrame,text=textRows[i][j],font=("Fixedsys",10,"bold"))) 
      else: 
       textLabels[i].append(Label(allValInnerFrame,text=textRows[i][j])) 
      if j == 9: 
       textLabels[i][j].grid(row=listRow,column=j,sticky=W+E,padx=(4,10)) 
      else: 
       textLabels[i][j].grid(row=listRow,column=j,sticky=W+E,padx=(4,4)) 
     if i == 0: 
      separator = tk.Frame(allValInnerFrame, height=2, borderwidth=1, bg="black", relief=SUNKEN) 
      separator.grid(row=1,column=0,columnspan=12,sticky=W+E) 

回答

0

那是因为你给的AllValOuterFrame 0行1的权重,但你把帆布行1.如果你将画布0行或放弃行1的权重为1,它会调整你期望的方式。

+0

是的,就是这样。很高兴知道grid_rowconfigure的第一个参数是您正在配置的行。我查看了这个数字的意思,但是我发现的答案有点含糊,所以我只保留了零,因为这是我在其他地方找到代码的方式。谢谢! – chetlin

相关问题