指定Tkinter文本框的尺寸(以像素为单位)

时间:2013-02-15 02:49:00

标签: python tkinter

如何使用像素指定Tkinter文本框的尺寸?我不是要改变字体大小,我用它来帮助我将它缩放到窗口的大小。

9 个答案:

答案 0 :(得分:7)

您可以将其放入框架中,通过停用大小传播并将条目配置为粘贴到框架边框来强制框架固定大小。也应该以与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()

答案 1 :(得分:2)

我有同样的问题,似乎最简单的答案是实例化一个指定大小的Frame对象,打包它,然后使用place方法在其中放置和调整小部件。我发现在Frame对象上调用pack_propagate(0)方法是不必要的。

这是一段简短的代码,在几个小部件上举例说明了这种方法。

根据您的问题,在此脚本中实例化的最后一个窗口小部件是一个文本框小部件,其大小以像素为单位指定。

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方法将覆盖您的展示位置和大小调整。

如果以面向对象的方式表达代码,您的代码可能会更好地组织,但是这个示例只显示了以像素而不是其他单位完成小部件大小调整所需的操作顺序。

答案 2 :(得分:1)

这对我有很大帮助:

  

您还可以使用height和width选项显式设置   尺寸。如果在按钮中显示文本,则这些选项定义大小   按钮的文本单位。如果您显示位图或图像,   它们以像素(或其他屏幕单位)定义大小。您可以   指定文本按钮的大小(以像素为单位),但这需要   有些神奇。这是一种方法(还有其他方法):

     

f = Frame(master,height = 32,width = 32)f.pack_propagate(0)#don&#t; t   收缩f.pack()

     

b =按钮(f,text ="当然!")b.pack(fill = BOTH,expand = 1)

来源:http://effbot.org/tkinterbook/button.htm

答案 3 :(得分: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像素。创建此类的实例时,它会显示此大小的窗口。 希望这有帮助!

答案 4 :(得分:0)

这就是我的做法。我将Text对象的尺寸放置在了位置标记内

    firstname = Text()
    firstname.place(x = 170, y = 20, height = 25, width = 200)

答案 5 :(得分:0)

这样做:

void rst::rasterizer::rasterize_triangle(const Triangle& t, const std::array<Eigen::Vector3f, 3>& view_pos) 
{
    
    std::array v = t.toVector4();
    float trix[3] = {t.v[0][0], t.v[1][0], t.v[2][0] };
    float triy[3] = {t.v[0][1], t.v[1][1], t.v[2][1] };

    std::pair<float*, float*> xrange = std::minmax_element(trix, trix + 3);
    std::pair<float*, float*> yrange = std::minmax_element(triy, triy + 3);
    for (int x = std::floor(*xrange.first); x < std::ceil(*xrange.second); ++x)
    {
        for(int y = std::floor(*yrange.first); y < std::ceil(*yrange.second); ++y)
        {
            if(!insideTriangle(x, y, t.v)) continue;

            auto[alpha, beta, gamma] = computeBarycentric2D(x, y, t.v);
            float Z = 1.0 / (alpha / v[0].w() + beta / v[1].w() + gamma / v[2].w());
            float zp = alpha * v[0].z() / v[0].w() + beta * v[1].z() / v[1].w() + gamma * v[2].z() / v[2].w();
            zp *= Z;

            if(zp >= depth_buf[y * width + x]) continue;
            depth_buf[y * width + x] = zp;
        }
    }
}

from tkinter import * root = Tk() t = Text(root) t.pack(fill=BOTH, expand=1) root.mainloop() fill=BOTH是最重要的部分。它们使它随窗口扩展,没有它们之一,窗口将无法向某个方向扩展。

答案 6 :(得分:0)

您不能将 Text 的 width 选项设置为表示字符数的整数以外的任何值。但是当您知道您的字体时,您可以计算该字体中字符串的宽度。相反,如果您知道您希望 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}

这可能不是问题的完美答案,但它使您无需引入额外的小部件即可获得接近的结果。如果您想要更精确的东西,框架包装器可能是您的最佳选择。

答案 7 :(得分:-1)

可以使用configure设置高度

var = tk.Text(self)
var.configure(height=1)

答案 8 :(得分:-2)

entry_2 = Entry(win, justify = 'center')
entry_2.grid(row =2,column = 7,ipadx=10, ipady=10)