Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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/4/wpf/12.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 如何堆叠两个小部件并在它们之间切换?_Python_Tkinter - Fatal编程技术网

Python 如何堆叠两个小部件并在它们之间切换?

Python 如何堆叠两个小部件并在它们之间切换?,python,tkinter,Python,Tkinter,我想编写两个小部件的脚本,这两个小部件将被堆叠起来,我将使用一个键从一个小部件切换到另一个小部件。每个小部件都是一个框架,包含几个标签s。到目前为止,我有以下代码(每个框架只有一个标签): 将Tkinter作为tk导入 导入ttk 导入日期时间 def main(): #初始化根 root=tk.tk() #初始化小部件 仪表板(根) 记事本=记事本(根) #设置关键操作 根部绑定(“”,根部提升) root.bind(“”,破折号.raiseme) root.bind(“”,notepad.r

我想编写两个小部件的脚本,这两个小部件将被堆叠起来,我将使用一个键从一个小部件切换到另一个小部件。每个小部件都是一个
框架
,包含几个
标签
s。到目前为止,我有以下代码(每个
框架只有一个
标签
):

将Tkinter作为tk导入
导入ttk
导入日期时间
def main():
#初始化根
root=tk.tk()
#初始化小部件
仪表板(根)
记事本=记事本(根)
#设置关键操作
根部绑定(“”,根部提升)
root.bind(“”,破折号.raiseme)
root.bind(“”,notepad.raiseme)
root.mainloop()
类仪表板(ttk.Frame):
定义初始化(自身,父级):
ttk.Frame.uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
self.dashframe=tk.Frame(父级)
self.labone=tk.Label(self.dashframe,text=“lab1”,fg='black',bg='blue')
self.labone.grid(行=0,列=0)
def raiseme(自身、事件):
打印“raiseme dash”
self.labone.configure(text=datetime.datetime.now())
self.dashframe.lift()
类记事本(ttk.Frame):
定义初始化(自身,父级):
ttk.Frame.uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
self.noteframe=tk.Frame(父级)
self.laboneone=tk.Label(self.noteframe,text=“lab11”,fg='白色',bg='红色')
self.labonene.grid(行=0,列=0)
def raiseme(自身、事件):
打印“raiseme记事本”
self.laboneone.configure(text=datetime.datetime.now())
self.noteframe.lift()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
按F1
和F2进入正确的例程,但我得到的唯一结果是主窗口为空。没有显示错误,所以我猜代码运行良好(只是不是O希望的方式:))


我可以使用上面的框架实现切换吗?

您的代码至少有两个大问题

首先,您正在创建所有这些新帧,但不会将它们放置在任何位置,因此它们永远不会出现在任何位置。如果你有一个没有放置任何东西的主窗口,当然你只需要“获取主窗口,清空”。您需要在任何小部件上调用
pack
或其他一些布局方法,以使其显示在其父部件上。在本例中,听起来您希望将它们放在完全相同的位置,因此
grid
place
可能就是您想要的

其次,你的
仪表板
记事本
类本身就是
框架
类,但它们不做任何
框架
类的事情;相反,它们各自创建另一个同级
Frame
,并将标签附加到该同级。因此,即使您打包了
仪表板
记事本
,它们也只是空框小部件,所以这没有任何好处

如果您同时修复了这两个问题,我认为您的代码可以满足您的要求:

class Dashboard(ttk.Frame):
    def __init__(self, parent):
        ttk.Frame.__init__(self, parent)  # voodoo
        self.labone = tk.Label(self, text="lab1", fg='black', bg='blue')
        self.labone.grid(row=0, column=0)
        self.grid(row=0, column=0)

    def raiseme(self, event):
        print "raiseme dash"
        self.labone.configure(text=datetime.datetime.now())
        self.lift()

class Notepad(ttk.Frame):
    def __init__(self, parent):
        ttk.Frame.__init__(self, parent)  # also voodoo
        self.laboneone = tk.Label(self, text="lab11", fg='white', bg='red')
        self.laboneone.grid(row=0, column=0)
        self.grid(row=0, column=0)

    def raiseme(self, event):
        print "raiseme notepad"
        self.laboneone.configure(text=datetime.datetime.now())
        self.lift()
但是,您可能还希望为所有内容设置一个固定的大小;否则,您可能会提升红色小部件,例如,只覆盖蓝色小部件的96%,因为当前时间比前一个小部件稍微窄一些


您为灵感而链接的代码尝试执行以下操作:

    newFrame = tkinter.Frame(root).grid()
    newFrame_name = tkinter.Label(newFrame, text="This is another frame").grid()

这不起作用,因为
grid
返回
None
,而不是小部件。但至少它调用了
网格
;你的甚至没有这样做。

看起来这里可能有一些有用的信息:[[1]:@Totem:是的,我看到了这个问题(并从那里了解了
lift
)但是它没有帮助。您没有使用
pack
grid
或其他任何东西将任何帧放置在任何位置,因此…您希望它们出现在哪里?好的,我唯一能想到的另一件事可能会有帮助的是使用focus\u set查看可能性。另外,为什么您的每个帧子类都在同一帧上创建第二个帧父帧(也没有放在任何地方),然后将标签添加到第二个帧中,而不是添加到它本身?谢谢。我发现我提升了错误的元素,这是一件事(子帧之外的元素没有意义,现在我开始理解它们是如何工作的)。您提到我没有使用
grid()
--我使用了它们,但只在
标签上使用了
元素。现在我明白了,我还需要在框架上使用
网格()
,这确实是有意义的。至于固定大小-你是对的,我给出的代码只是一个小例子。再次感谢!作为一个附带问题:你知道
ttk.frame.是什么吗
行可以吗?(我在一个示例中发现了这一点,但这一行的含义让我不知所措)@WoJ:尝试解释它。如果仍然不清楚,请随时提出后续问题。(顺便说一句,这是升级到Python 3.x后变得更简单的许多事情之一。)
    newFrame = tkinter.Frame(root).grid()
    newFrame_name = tkinter.Label(newFrame, text="This is another frame").grid()