Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Tkinter中使用grid()创建简单向导?_Python_Python 2.7_Tkinter_Wizard - Fatal编程技术网

Python 如何在Tkinter中使用grid()创建简单向导?

Python 如何在Tkinter中使用grid()创建简单向导?,python,python-2.7,tkinter,wizard,Python,Python 2.7,Tkinter,Wizard,原谅我。我是Tkinter的新手,对python只有简单/适度的了解。我的总体目标是制作一个类似向导的程序,在这个程序中,用户输入的细节随着程序的进行而不断增加(某些帧的出现取决于某些输入)。我只是想让核心向导的想法发挥作用,但遇到了一些问题。这是我的代码(我已经注释掉了其他来源暗示的事情,它们在正确的轨道上,但对我来说失败了): 从Tkinter导入* root=Tk() #root.minsize(300300)? #根几何(“300x300”)? def next(): 移动(+1) de

原谅我。我是Tkinter的新手,对python只有简单/适度的了解。我的总体目标是制作一个类似向导的程序,在这个程序中,用户输入的细节随着程序的进行而不断增加(某些帧的出现取决于某些输入)。我只是想让核心向导的想法发挥作用,但遇到了一些问题。这是我的代码(我已经注释掉了其他来源暗示的事情,它们在正确的轨道上,但对我来说失败了):

从Tkinter导入*
root=Tk()
#root.minsize(300300)?
#根几何(“300x300”)?
def next():
移动(+1)
def prev():
移动(-1)
def exit_程序():
root.destroy()
page1=框架(根,宽度=300,高度=300)
第1页网格()
#第1页网格(行=0,列=0,sticky=“nsew”)?
#第1页网格配置(0,权重=1)?
#第1页网格配置(0,权重=1)?
p1_label=label(第1页,text='这是向导的第1页。')。网格(列=1,行=0)
p1\u退出=按钮(第1页,text=“退出”,命令=退出程序)。网格(列=1,行=2)
p1_next=按钮(第1页,text=“next”,command=next)。网格(列=2,行=2)
page2=帧(根)
p2_label=label(第2页,text='这是向导的第2页。')。网格(列=1,行=0)
p2_prev=按钮(第2页,text=“prev”,command=prev).grid(列=1,行=2)
p2_next=按钮(第2页,text=“next”,command=next).网格(列=2,行=2)
第3页=帧(根)
p3_label=label(第3页,text='这是向导的第3页。')。网格(列=1,行=0)
p3_prev=按钮(第3页,text=“prev”,command=prev).grid(列=1,行=2)
p3_退出=按钮(第3页,text=“退出”,命令=退出程序)。网格(列=2,行=2)
pages=[page1,page2,page3]
当前=第1页
def移动(dirn):
全球电流
idx=页面索引(当前)+dirn
如果不是0
为什么第一个(和所有)帧会缩小到小部件的大小
在里面,尽管我已经将宽度和高度设置为一定的高度
数量难道我不能说出框架的尺寸吗,
网格将自身与这些尺寸对齐

这就是tkinter的设计原理:容器收缩以适应其内容物。99%的情况下,这是正确的解决方案。正如您所观察到的,您可以关闭几何体传播,但这会产生副作用,并且需要您执行tkinter通常能更好地处理的工作。如果您确实坚持将帧设置为特定大小,则通常会关闭传播

如果是特定情况,则强制主窗口为特定大小比强制框架为特定大小更有意义。然后,框架将增长(或收缩)以适应主窗口。可以使用根窗口的
geometry
方法执行此操作

为什么网格看起来是2x2?不应该是3x3吗,因为 第0个条目有效吗?我已将一个按钮(p1_next)放置到位 (2x2)。是否因为0列中没有任何内容,grid()将删除它并 把所有的东西都移到左边

如果列中没有任何内容,则该列的默认宽度为零(除非它是统一组的一部分,或具有最小值等)。行也是如此——默认情况下,空行的高度为零

这是我想要实现的最好的方法吗

这很难回答。可能没有“最好”的方法

您可能想看一个相关的问题,它显示了一种在一组帧之间切换的方法,方法是将它们堆叠起来,然后将当前帧提升到堆栈的顶部

from Tkinter import *
root = Tk()
#root.minsize(300,300) ?
#root.geometry("300x300") ?

def next():
    move(+1)

def prev():
    move(-1)

def exit_program():
    root.destroy()

page1 = Frame(root, width=300, height=300)
page1.grid()
#page1.grid(row=0,column=0, sticky="nsew") ?
#page1.grid_rowconfigure(0, weight=1) ?
#page1.grid_columnconfigure(0, weight=1) ?
p1_label = Label(page1, text='This is page 1 of the wizard.').grid(column=1, row=0)
p1_quit = Button(page1, text="Quit", command=exit_program).grid(column=1, row=2)
p1_next = Button(page1, text="Next", command=next).grid(column=2, row=2)

page2 = Frame(root)
p2_label = Label(page2, text='This is page 2 of the wizard.').grid(column=1, row=0)
p2_prev = Button(page2, text="Prev", command=prev).grid(column=1, row=2)
p2_next = Button(page2, text="Next", command=next).grid(column=2, row=2)

page3 = Frame(root)
p3_label = Label(page3, text='This is page 3 of the wizard.').grid(column=1, row=0)
p3_prev = Button(page3, text="Prev", command=prev).grid(column=1, row=2)
p3_quit = Button(page3, text="Quit", command=exit_program).grid(column=2, row=2)

pages = [page1, page2, page3]
current = page1
def move(dirn):
    global current
    idx = pages.index(current) + dirn
    if not 0 <= idx < len(pages):
        return
   current.grid_forget()
   current = pages[idx]
   current.grid()

root.mainloop()