我该如何使用像素指定Tkinter文本框的尺寸?我不是想改变字体大小,而是希望通过这种方式帮助我将其缩放到窗口的大小。
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用户界面时的排版方式,但它允许您以像素为单位指定许多小部件的尺寸。在子小部件上随后使用pack方法将覆盖您的位置和大小设置。
如果您以面向对象的方式表达代码,则代码可能会更有组织性,但此示例仅显示实现以像素而不是其他单位调整小部件大小所需的操作顺序。
就这样做:
from tkinter import *
root = Tk()
t = Text(root)
t.pack(fill=BOTH, expand=1)
root.mainloop()
fill=BOTH
和expand=1
是最重要的部分。它们使得窗口随着窗口大小而扩展,如果没有其中之一,窗口将无法朝某个方向扩展。 firstname = Text()
firstname.place(x = 170, y = 20, height = 25, width = 200)
width
选项设置为除表示字符数的整数以外的任何内容。但是,当您知道字体时,可以计算该字体中字符串的宽度。反之,如果您知道要求Text的宽度为多少像素,可以计算出可容纳该像素长度的字符数,并将Text宽度设置为该字符数(大致上)。对于等宽字体来说很简单,但对于变宽字体来说就会更加棘手。import tkinter as tk
tk.font.Font(font='TkFixedFont').actual()
给出:
{'family': 'Courier New', 'size': 10, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0}
这可能不是完美的答案,但它允许您获得接近的结果,而无需引入其他小部件。如果您想要更精确的东西,可以使用框架包装器。
这对我很有帮助:
您还可以使用高度和宽度选项来显式设置大小。如果在按钮中显示文本,则这些选项定义按钮的文本单位大小。如果您显示位图或图像,则它们以像素(或其他屏幕单位)定义大小。即使对于文本按钮,您也可以指定像素大小,但需要一些技巧。以下是一种方法(还有其他方法):
f = Frame(master, height=32, width=32) f.pack_propagate(0) # 不要缩小 f.pack()
b = Button(f, text="确定!") b.pack(fill=BOTH, expand=1)
text_width = 300
text_height = 200
text_widget = tk.Text(root, width=text_width // 6, height=text_height // 14)
text_widget.pack()
这是我经常这样做的方式:
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)
place
,或者将文本小部件放在一个可以用像素定义的框架中,或者可能包括创建绑定,以便在渲染后可以了解根窗口的大小等等。 - Bryan Oakley