如何使用像素指定 Tkinter 文本框的尺寸?我不是要更改字体大小,而是使用它来帮助我将其缩放到窗口的大小。
9 回答
您可以通过将其放在框架内,通过停用大小传播并将条目配置为固定到框架边界来强制框架为固定大小。也应该以类似的方式与 pack 一起工作。
import Tkinter # tkinter with small t for python 3
#import ttk # nicer widgets
root = Tkinter.Tk()
mainFrame = Tkinter.Frame(root)
mainFrame.grid()
button = Tkinter.Button(mainFrame, text="dummy")
button.grid()
entryFrame = Tkinter.Frame(mainFrame, width=454, height=20)
entryFrame.grid(row=0, column=1)
# allow the column inside the entryFrame to grow
entryFrame.columnconfigure(0, weight=10)
# By default the frame will shrink to whatever is inside of it and
# ignore width & height. We change that:
entryFrame.grid_propagate(False)
# as far as I know you can not set this for x / y separately so you
# have to choose a proper height for the frame or do something more sophisticated
# input entry
inValue = Tkinter.StringVar()
inValueEntry = Tkinter.Entry(entryFrame, textvariable=inValue)
inValueEntry.grid(sticky="we")
root.mainloop()
我有同样的问题,似乎最简单的答案是实例化一个指定大小的 Frame 对象,打包它,然后使用 place 方法在其中放置和调整小部件的大小。我发现对 Frame 对象调用 pack_propagate(0) 方法是不必要的。
这是一小段代码,它在几个小部件上举例说明了这种方法。
根据您的问题,此脚本中实例化的最后一个小部件是一个文本框小部件,其大小以像素为单位。
from Tkinter import * #For python 3 use: from Tkinter import *
root = Tk()
root.title("Fee Fie Foe Fum")
frame=Frame(root, width=300, height=160)
frame.pack()
button1 = Button(frame, text="Mercy!")
button1.place(x=10, y=10, height=30, width=100)
button2 = Button(frame, text="Justice!")
button2.place(x=10, y=50, height=30, width=100)
text1 = Label(text="Verdict:")
text1.place(x=10, y=90)
tbox1 = Text(frame)
tbox1.place(x=10, y=115, height=30, width=200)
root.mainloop()
当然,这确实将您锁定在设计 Tkinter UI 的 place 方法中,但它确实允许您以像素为单位指定许多小部件的尺寸。随后在子小部件上使用 pack 方法将覆盖您的展示位置和大小。
如果您以面向对象的方式表达您的代码可能会更好地组织它,但这个示例仅显示了以像素而不是其他单位来完成小部件大小调整所需的操作序列。
像这样做:
from tkinter import *
root = Tk()
t = Text(root)
t.pack(fill=BOTH, expand=1)
root.mainloop()
thefill=BOTH
和 theexpand=1
是最重要的部分。它们使它随窗口一起扩展,如果没有它们中的一个,窗口就不会向某个方向扩展。
这是我的做法。我将 Text 对象的尺寸放在 place 标记内
firstname = Text()
firstname.place(x = 170, y = 20, height = 25, width = 200)
这对我帮助很大:
您还可以使用高度和宽度选项来显式设置大小。如果您在按钮中显示文本,这些选项以文本单位定义按钮的大小。如果您改为显示位图或图像,它们以像素(或其他屏幕单位)为单位定义大小。您甚至可以为文本按钮指定像素大小,但这需要一些技巧。这是一种方法(还有其他方法):
f = Frame(master, height=32, width=32) f.pack_propagate(0) # 不收缩 f.pack()
b = Button(f, text="Sure!") b.pack(fill=BOTH, expand=1)
您不能将width
Text 的选项设置为表示字符数的整数以外的任何值。但是当您知道您的字体时,您可以计算该字体中字符串的宽度。相反,如果您知道您希望 Text 的宽度是多少像素,则可以计算多少字符适合该像素长度并将 Text 宽度设置为该字符数(大致)。使用固定宽度的字体很简单,但使用可变宽度的字体会变得更棘手。
文本小部件的默认字体是“TkFixedFont”。
import tkinter as tk
tk.font.Font(font='TkFixedFont').actual()
给出:
{'family': 'Courier New', 'size': 10, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0}
它可能不是问题的完美答案,但它可以让您获得接近的东西,而无需引入额外的小部件。如果你想要更精确的东西,框架包装器可能是要走的路。
这是我经常这样做的方式:
from tkinter import *
class App:
def __init__(self):
self.tk = Tk()
self.canvas = Canvas(self.tk, width = 500, height = 500)
self.canvas.pack()
这会将每个方向的尺寸设置为 500 像素。当你创建这个类的一个实例时,它会显示一个这个大小的窗口。希望这可以帮助!
可以使用configure设置高度
var = tk.Text(self)
var.configure(height=1)
entry_2 = Entry(win, justify = 'center')
entry_2.grid(row =2,column = 7,ipadx=10, ipady=10)