这两个功能之间的主要区别是什么?
我目前正在开发一个包含画布和标签的程序,后者表现为按钮。现在画布使用.pack()放置,而我使用.place()作为标签。此外,程序会读取并使用鼠标单击的位置来执行某些操作。
目前有一个错误会导致程序在单击标签时触发意外操作,单击标签时我会惊讶地发现鼠标点击的x和y坐标不是对窗口的引用(正如我预期的那样)是),而是标签的左上角坐标。
有没有办法设置它,以便标签不会修改鼠标点击的x和y坐标?
我是python的新手,这是我使用tkinter创建的第一个项目。如果需要,我可以根据要求提供代码。
编辑:可以找到整个程序here。从第87行开始添加标签:
newgame_Label = Label(parent, anchor=NW, font="Calibri",
text="New Game")
newgame_Label.bind("<Button 1>", self.newgame_Click)
newgame_Label.place(x=450, y=300)
reset_Label = Label(parent, anchor=NW, font="Calibri",
text="Reset Board")
reset_Label.bind("<Button 1>", self.reset_Click)
reset_Label.place(x=450, y=400)
函数initBoard在画布上调用.pack()方法。该程序是Light's Out的克隆,认为它是学习python和tkinter的好方法。
或者,我可以不使用标签,只使用canvas小部件可用的create_text方法,但这需要一些解决方法来确定是否已单击它。最感兴趣的是找出为什么标签窗口小部件的.place()行为与事件的方式相同,尽管它们共享相同的框架。
答案 0 :(得分:2)
主要区别在于place
允许您指定绝对坐标,pack
使用框模型,允许您在框的两侧放置小部件。
位置。这对于一小类问题非常有用,但是包和网格更有用。 Place需要您花费更多精力才能正确调整GUI大小。
答案 1 :(得分:0)
您可以将pack()和place()一起使用:
// specialisation for pointer types
template <class T, class... Args>
struct ArgsEstimate<T*, Args...> {
static const std::size_t size = 32 + ArgsEstimate<Args...>::size;
};
记住! 您必须先放置背包