python - Tkinter 文本小部件变形列大小

标签 python python-3.x tkinter widget

我无法像图片那样按行或列打包小部件,你能帮我吗?

enter image description here

问题是文本小部件变形了列大小,文本不应该在 row=3,column=0 中?

enter image description here

   def _formato(self):
    t1=tkinter.Toplevel(self._finestra)
    labelTop = tkinter.Label(t1,text = "Tipo di carattere")
    labelTop.grid(row=0, column=0)
    labelTop2 = tkinter.Label(t1,text = "Dimensione")
    labelTop2.grid(row=0, column=1)
    labelTop3 = tkinter.Label(t1)
    labelTop3.grid(row=2, column=0)
    listaFont=tkinter.ttk.Combobox(t1)
    allfonts = sorted(tkinter.font.families())
    listaFont["values"] =  allfonts
    listaFont.grid(row=1, column=0)
    listaFont.bind("<<ComboboxSelected>>", None)
    listaDimensione = tkinter.ttk.Combobox(t1)
    allfontsizes = list(range(8,70))
    listaDimensione['values'] =  allfontsizes
    listaDimensione.grid(row=1, column=1)
    testo= tkinter.Text(t1)
    testo.insert(tkinter.INSERT,'AaBbYyZz')
    testo.grid(row=3,column=0)

最佳答案

Question: All widgets in the same column should have equal width.

核心是,为每一列使用一个Frame,并将小部件布局到Frame中。
这允许所有小部件调整到 Frame width
enter image description here


  1. 定义 类 App 用于演示目的

    class App(tk.Tk):
        def __init__(self):
            super().__init__()
    
  2. 要获得相等的宽度,请为每一列使用一个tk.Frame
    允许 Frame 增加他的宽度
    允许 Frame 内的小部件增加他的宽度
    定义 Frame 以适应 App 宽度

            # column 0
            self.grid_columnconfigure(0, weight=1)
            frame_0 = tk.Frame(self)
            frame_0.grid_columnconfigure(0, weight=1)
            frame_0.grid(row=0, column=0, sticky='nsew')
    
  3. 添加小部件...
    定义每个小部件,使其 width 增加到 Frame width

            labelTop = tkinter.Label(frame_0, text="Tipo di carattere")
            labelTop.grid(row=0, column=0, sticky='ew')
    
            listaFont = tkinter.ttk.Combobox(frame_0)
            listaFont.grid(row=1, column=0, sticky='ew')
            allfonts = sorted(tkinter.font.families())
            listaFont["values"] = allfonts
            listaFont.bind("<<ComboboxSelected>>", None)
    
  4. 注意:使用width=1

    重置默认值
            testo = tkinter.Text(frame_0, width=1)
            testo.insert(tkinter.INSERT, 'AaBbYyZz')
            testo.grid(row=3, column=0, sticky='ew')
    
  5. 第 1 列相同 ...

            # column 1
            self.grid_columnconfigure(1, weight=1)
            frame_1 = tk.Frame(self)
            frame_1.grid_columnconfigure(0, weight=1)
            frame_1.grid(row=0, column=1, sticky='nsew')
    
            labelTop2 = tkinter.Label(frame_1, text="Dimensione")
            labelTop2.grid(row=0, column=0, sticky='ew')
    
            listaDimensione = tkinter.ttk.Combobox(frame_1)
            allfontsizes = list(range(8, 70))
            listaDimensione['values'] = allfontsizes
            listaDimensione.grid(row=1, column=0, sticky='ew')
    

Usage:

    if __name__ == "__main__":
        App().mainloop()

使用 Python 测试:3.5

关于python - Tkinter 文本小部件变形列大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959968/

相关文章:

python - Pandas 复制了 3 个字段

python-3.x - 删除python中的特定行和对应的文件

python - Tkinter 框架不填充剩余空间

python - 在 tkinter 窗口上使用网格管理器时如何实现滚动条

python - 彩色图上的轮廓 : not continuous (Python)

python - 从字节文件中打开 PIL 图像

python - 简单的 pygtk 和线程示例请

python - Scrapy 正在重定向直接链接

python-3.x - 高斯噪声不会应用于整个图像

python tkinter 使用 PIL 显示动画 GIF