Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 .pack()和.place()之间的区别以及它们的共同使用?_Python_Python 3.x_Tkinter - Fatal编程技术网

Python .pack()和.place()之间的区别以及它们的共同使用?

Python .pack()和.place()之间的区别以及它们的共同使用?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,这两种功能的主要区别是什么 我目前正在开发一个包含画布和标签的程序,后者的行为就像一个按钮。现在画布是使用.pack()放置的,而我使用.place()作为标签。此外,程序读取并使用鼠标单击的位置来执行某些操作 当前有一个错误,导致程序在单击标签时触发意外操作,令我惊讶的是,在单击标签时,鼠标单击的x和y坐标不是指向窗口(正如我预期的那样),而是指向标签的左上角坐标 是否有一种方法可以将其设置为标签不会修改其内鼠标单击的x和y坐标 我对python比较陌生,这是我使用tkinter制作的第一个项

这两种功能的主要区别是什么

我目前正在开发一个包含画布和标签的程序,后者的行为就像一个按钮。现在画布是使用.pack()放置的,而我使用.place()作为标签。此外,程序读取并使用鼠标单击的位置来执行某些操作

当前有一个错误,导致程序在单击标签时触发意外操作,令我惊讶的是,在单击标签时,鼠标单击的x和y坐标不是指向窗口(正如我预期的那样),而是指向标签的左上角坐标

是否有一种方法可以将其设置为标签不会修改其内鼠标单击的x和y坐标

我对python比较陌生,这是我使用tkinter制作的第一个项目。如果需要,我可以根据要求提供代码

编辑:可以找到整个程序。从第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)  
newgame\u Label=Label(父,锚=NW,font=“Calibri”,
text=“新游戏”)
newgame\u Label.bind(“,self.newgame\u单击)
新游戏标签位置(x=450,y=300)
重置标签=标签(父项,锚点=NW,font=“Calibri”,
text=“重置板”)
重置标签.bind(“,self.reset\u单击)
重置标签位置(x=450,y=400)
函数initBoard调用画布上的.pack()方法。该程序是python和tkinter的一个克隆,虽然它是学习python和tkinter的好方法


或者,我可以不使用标签,而只使用画布小部件可用的create_text方法,但这需要一些变通方法来确定是否已单击它。最感兴趣的是找出原因。尽管标签小部件共享同一帧,但其.place()的行为方式与事件的行为方式相同。

主要区别在于
place
允许您指定绝对坐标,
pack
使用框模型,允许您沿框的侧面放置小部件

place在现实应用程序中并不经常使用。这对于一小类问题来说是很好的,但是pack和grid更有用。Place需要您花费更多的精力使GUI正确调整大小。

您可以同时使用pack()和Place()

r = Tk()
label = Label(r, text = any text)
label.pack()
label.place(x = x, y = y)
记住!
您必须先使用打包再放置

首先:您能给我们看一下您的代码吗?第二:您应该明确使用
栅格
几何体管理器:对于这个简单的情况。添加,选中编辑。如果我决定使用网格,我是否能够毫无问题地重叠画布和标签?