Python Tkinter widget.place方法不起作用

Python Tkinter widget.place方法不起作用,python,tkinter,Python,Tkinter,我有一些代码,比如 from tkinter import * root = Tk() root.geometry("800x700+0+0") #---------Backgroud of the main canvas-----`enter code here`------- backGroundCanvas = Canvas(root,bg = 'white', width = 800, height = 600) backGroundCanvas.focus_set() backGr

我有一些代码,比如

from tkinter import *
root = Tk()
root.geometry("800x700+0+0")

#---------Backgroud of the main canvas-----`enter code here`-------

backGroundCanvas = Canvas(root,bg = 'white', width = 800, height = 600)
backGroundCanvas.focus_set()
backGroundCanvas.pack()

#--------------------------------------------------

#--------The other widgets out of the canvas--------

scoreLabel = Label(root, text = 'Your score is: 0', bg = 'red')
scoreLabel.place(x = 300, y = 750)
scoreLabel.pack()

root.mainloop()

但无论我如何更改place方法的参数,标签始终在同一个位置,无法更改。我不知道为什么!请帮帮我,非常感谢

在TKinter中有三种基本的几何图形管理器:网格、打包和放置

<>你应该尽量避免使用地方,而不是使用网格或软件包(我个人认为只有网格是一个好的管理者,但这只是我的意见)。 在代码中,您使用PlaceManager为小部件设置位置,然后将控制权交给包管理器。只需移除
scoreLabel.pack()
et瞧

注意:您的应用程序是700px高,并且您正试图将红色标签从顶部放置在750px,您的小部件将在屏幕之外

NBB:我强烈建议使用网格管理器

from tkinter import *
root = Tk()
root.geometry("800x700+0+0")

#---------Backgroud of the main canvas-----`enter code here`-------

backGroundCanvas = Canvas(root,bg = 'white', width = 800, height = 600)
backGroundCanvas.focus_set()
backGroundCanvas.pack()

#--------------------------------------------------

#--------The other widgets out of the canvas--------

scoreLabel = Label(root, text = 'Your score is: 0', bg = 'red')
scoreLabel.place(x = 300, y = 600)

root.mainloop()

如果您的基于意见的建议遇到了一个例子,
.place()
geometry manager的{pixel absolute | widget relative}服务失败,您是否愿意发布一些基于事实的推理(代码示例)?感谢您提供清晰可靠的示例来支持您的建议opinion@user3666197当前位置据我所知,没有任何研究表明
place
失败的地方。然而,我想说的是,几乎所有花时间在tkinter中维护复杂GUI的人都会告诉你,绝对定位是很难做到的。虽然我不认为应该严格避免使用place本身,
pack
grid
通常会使用更少的代码行提供更好的行为,并且更易于维护。我想你很难找到一个好的基于tkinter(或tcl/tk)的GUI,它在大部分布局中都使用了
place
。确切地说,我建议使用网格管理器而不是place管理器是为了节省你的时间,避免你计算每个小部件像素位置的枯燥任务。很明显,您可以使用place实现整个接口,尽管这会很糟糕。当我想创建具有特定设计的小部件类时,我个人会使用它,例如一个覆盖画布的按钮或类似的东西。我非常喜欢使用place geometry manager,在创建我自己的用于创建布局类型的库之后,我发现它更快、更容易理解网格或包,虽然我没怎么用过背包。同意只使用原始位置,但如果创建宏来帮助布局,则即使修改布局也变得很容易。但是,我不会为手机和平板电脑编写应用程序,也不会在运行中调整大小。主要是生产环境中的数据输入和报告。不要将
.pack()
.place()
组合使用,使用其中一种,在这种情况下使用
.place()
,然后更改值即可。