我在很多地方都有评论,我尝试使用columnconfigure或rowconfigure方法来调整窗口大小,但似乎没有任何工作。我也可以取出mainloop(),我的程序运行完全一样。这让我相信我可能没有正确地调用/使用mainloop。这些方法主要用于组织,我知道它们现在不是可重用的方法。我计划在某些时候修复它,但这不是这篇文章的目的。
#!/usr/bin/python
from tkinter import *
from tkinter import ttk
import webbrowser
from dictionary import *
class AI():
def __init__(self):
self.urls = dictionary.get()
self.makeMainframe()
self.makeLabels()
self.makeDropDown()
self.makeButton()
self.makeEntry()
for child in self.mainframe.winfo_children():
child.grid_configure(padx=2, pady=2)
#child.columnconfigure(index='all',weight=1)
#child.rowconfigure(index='all',weight=1)
def openMenu(self):
webbrowser.open(self.urls[self.lunchVar.get()])
print(self.urls[self.lunchVar.get()])
def saveChoice(self, event):
print(self.foodVar.get())
def makeMainframe(self):
self.mainframe = ttk.Frame(padding="3 3 12 12")
self.mainframe.grid(column=0, row=0, sticky=(N,W,E,S))
#self.mainframe.columnconfigure('all', weight=1)
#self.mainframe.rowconfigure(index='all', weight=1)
def makeDropDown(self):
self.lunchVar = StringVar()
self.lunchChoice = ttk.Combobox(self.mainframe, textvariable=self.lunchVar, state='readonly')
self.lunchChoice['values'] = list(self.urls.keys())
self.lunchChoice.grid(column=2, row=1, sticky=(W, E))
def makeLabels(self):
ttk.Label(self.mainframe, text="Today's lunch is from...").grid(column=1, row=1, sticky=(E,W))
ttk.Label(self.mainframe, text="Click here for a menu -->").grid(column=1, row=2, sticky=(E,W))
ttk.Label(self.mainframe, text="What will you be having?").grid(column=1, row=3, sticky=(E,W))
def makeButton(self):
self.menu = ttk.Button(self.mainframe, textvariable=self.lunchVar, command=self.openMenu)
self.menu.grid(column=2, row=2, sticky=(W, E))
def makeEntry(self):
self.foodVar = StringVar()
self.foodChoice = ttk.Entry(self.mainframe, textvariable=self.foodVar)
self.foodChoice.grid(column=2, row=3, sticky=(E,W))
self.foodChoice.bind("<Return>", self.saveChoice)
#self.foodChoice.columnconfigure(index='all', weight=1)
AI=AI()
mainloop()
答案 0 :(得分:0)
您将int main(void)
{
int i,j;
int n=3;
double** A= Allocate(n,n);
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
scanf("%lf",&A[i][j]);
}
}
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
printf("%f\t",A[i][j]);
}
printf("\n");
}
for(i=0; i<n; i++)
{
free(A[i]);
}
free(A);
}
放在根窗口中,但您永远不会在根窗口中为任何行和列赋予权重。您也从未显式创建根窗口,但这不会导致问题。此外,self.mainframe
不是有效的行或列。
第一步是让你的主框架调整大小,然后你可以专注于框架内的内容。
"all"
注意:如果您将一个框架放在其他窗口小部件(例如根窗口)中,def makeMainframe(self):
...
self.mainframe._root().columnconfigure(0, weight=1)
self.mainframe._root().rowconfigure(index=0, weight=1)
可以说是一个更好的选择,因为您不必记住给予权重行和列。你可以替换它:
pack
......用这个:
self.mainframe.grid(column=0, row=0, sticky=(N,W,E,S))
self.mainframe._root().columnconfigure(0, weight=1)
self.mainframe._root().rowconfigure(index=0, weight=1)
假设您希望扩展条目小部件以水平填充空间,您需要对self.mainframe.pack(fill="both", expand=True)
执行相同操作:
mainframe