Tkinter按钮的高度和宽度

10
我正在尝试使用下面的代码创建一个按钮并更改其高度和宽度,但实际上该按钮在屏幕上不显示。但是如果你将鼠标悬停在该区域并单击它,它会打开新窗口。有什么想法吗?
import sys
from tkinter import *

#main menu
def mmWindow():
    mmWindow=Tk()
    mmWindow.geometry('600x600')


#first window   
mWindow= Tk()
mWindow.geometry('1920x1080+0+0')
mWindow.title('DMX512 Controller')

wtitle = Label (mWindow, text = "Pi DMX", fg = 'blue')
wtitle.place(x = 640, y = 100)

#main menu button
mmbutton = Button (mWindow, text = "Main Menu",command = mmWindow)
mmbutton.place( x=200, y = 200)
mmbutton.config(width=200, height=200)

实际上,它确实显示出来了。问题是,由于它太大了,很难与窗口的其余部分区分开来。 - user2555451
学校男孩错误!!!谢谢,现在我的下一个问题是我可以改变宽度,但高度的原始错误仍然存在,按钮的实际物理大小没有改变,但“点击”区域确实改变了……正如你可能已经猜到的,我是Python的新手。 - user2996828
我有点困惑你在做什么。为什么你要创建一个按钮,然后在将其放置在窗口后的一行更改其高度/宽度?你在这里想做什么?你是想做些特别的事情还是只是想在窗口上放置一个具有自定义大小的按钮? - user2555451
我只是想创建一个更大的按钮,因为程序最终将在7英寸触摸屏上运行,所以我需要一个更大的按钮。所以没有什么特别的(我不认为有),只需要一个更大的触摸面积。希望这样说得清楚。 - user2996828
3个回答

5
关于您最初的问题:按钮 确实 出现了。问题在于,它太大了,很难与窗口中的其他部分区分开来。
现在,您说您的最终目标是更改按钮的大小。如果是这样,那么您选择了正确的方法:使用heightwidth选项来更改尺寸。
然而,我建议您对代码进行一些更改:
  1. 不要使按钮太大。即使在非常大的显示器上,按钮也不必如此之大。
  2. 不要将窗口设置得太大。没有人想要一个占据整个屏幕的应用程序。
  3. 使用.grid而不是.place。这样做可以更轻松地将小部件放置在所需位置。
  4. 在创建按钮时设置heightwidth选项,而不是之后再设置。
  5. 在这里不需要导入sys。只导入您需要的内容。
  6. 不要像这样导入:from tkinter import *。这样做会将许多名称转储到全局命名空间中,很容易被覆盖。
以下是我修改后的脚本版本:
import tkinter as tk

def mmWindow():
    mmWindow = tk.Tk()
    mmWindow.geometry('600x600')

mWindow = tk.Tk()
# You can set any size you want
mWindow.geometry('500x500+0+0')
mWindow.title('DMX512 Controller')

wtitle = tk.Label(mWindow, text="Pi DMX", fg='blue')
wtitle.grid(row=0, column=1)

# You can set any height and width you want
mmbutton = tk.Button(mWindow, height=5, width=20, text="Main Menu", command=mmWindow)
mmbutton.grid(row=1, column=1)

mWindow.mainloop()

谢谢你,我刚刚复制了你的代码并运行了它,然后尝试更改高度,但按钮的大小仍然没有改变,轮廓保持不变,宽度确实改变了,但高度没有改变...... - user2996828
@user2996828 - 嗯,我恐怕不知道为什么会这样。我提供的代码在普通操作系统(Windows、Mac、Linux)上都可以运行。但是,你说了“触摸屏”,这意味着可能是某种平板电脑。我没有带平板电脑,所以无法进行故障排除。 - user2555451
也许是我的设置问题,我目前没有在触摸屏上运行它,只是在我的 Mac 上运行 IDLE Python 版本 3.3.2 和 tk 版本 8.5.14。我认为宽度改变而高度没有改变很奇怪 :-s - user2996828
@user2996828 - 嗯,我们还可以尝试一件事。我曾经听说过IDLE在运行Tkinter脚本时会遇到困难。相反,直接从命令行运行脚本几次,并尝试不同的高度,看看是否有影响。 - user2555451
我刚刚尝试使用以下命令在终端中执行我的代码:python /Users/Josh/Documents/Uni/Year3/Diss/Python/DMX512.py但是出现了以下错误信息:Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'python' is not defined 有什么想法吗? - user2996828
@user2996828 - 尝试将"python"替换为Python可执行文件的完整路径。有些系统没有安装"python"别名。 - user2555451

1
import sys
from tkinter import *

def update_window_size():
    mmWindow.geometry('600x600')

mmWindow  = Tk()
mmWindow .geometry('1920x1080+0+0')
mmWindow .title('DMX512 Controller')

wtitle = Label(mmWindow, text="Pi DMX", fg='blue')
wtitle.place(relx=0.33, rely=0.0925925)

mmbutton = Button(mmWindow, text="Main Menu", command=update_window_size)
mmbutton.place(relw=0.104167, relh=0.185185, relx=0.104167, rely=0.185185)

mmWindow.mainloop()

我知道现在有点晚了,但是我想分享一下我解决按钮大小问题的方法。我相信使用relw和relh会更好一些。relw、relh、relx和rely都是父组件高度和宽度的分数,因此您不需要担心调整wtitle和mmbutton的大小。
如果您想从place更改它的宽度和高度,只需将以下代码放置在按钮命令中即可。
def update_button_size():
    mmbutton.place(width=20, height=20)

mmbutton = Button(mmWindow, text="Main Menu", command=update_button_size)
mmbutton.place(width=400, height=400, relx=0.104167, rely=0.185185)

如果您想从配置中更改其宽度和高度,请使用以下代码。
def update_button_size():
    mmbutton.config(width=20, height=20)

mmbutton = Button(mmWindow, text="Main Menu", command=update_button_size)
mmbutton.place(relx=0.104167, rely=0.185185)
mmbutton.config(width=400, height=400)

据我了解,配置宽度和高度与位置宽度和高度不同。

更准确地说,Buttonwidth 选项通常对应于字母的数量,而不是像 .place() 中的像素长度一样的长度,请参见 https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/button.html。您的答案有效,但正如其他答案所提倡的那样,我认为通常更容易使用 .grid()(或 .pack()),因为您不必担心重叠的小部件。我仅在非常特定的情况下使用 .place(),例如将 ttk.SizeGrip 放置在窗口的右下角。 - j_4321

0
你可以使用padx和pady:
mmbutton = Button(mmWindow, text="Main Menu", padx=43, pady=20)

或者只需删除您尝试更改大小并添加的代码即可。
mmbutton.config(padx=43, pady=20)

但请确保使用网格而不是位置!
希望我能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接