python-3.x - 如何仅更改 ttk.Entry 的一侧边框宽度?

标签 python-3.x tkinter tkinter-entry tkinter-layout ttkwidgets

我正在尝试使用 tkinter 网格和 ttk 条目显示数独布局(也许,我没有使用正确的方法来实现它)。我想知道 ttk 条目的样式选项是否有任何方法可以更改一侧的边框。我已经应用了这个功能:

def grid_layout(parent):
    
    s = ttk.Style()
    s.configure('border.TEntry',borderwidth=3)
    
    for row in range(1,10):
        for column in range(1,10):
            entry = None
            if column % 3 == 0 or row % 3 == 0:
                entry = ttk.Entry(parent, width=3,justify='center'
                                  ,style='border.TEntry')
            else:
                entry = ttk.Entry(parent,width=3,justify='center')
                
            entry.grid(column= column, row = row)

这会产生以下 View :

enter image description here

我只需要更改第 3-4、6-7 列和第 3-4 和 6-7 行共享的边框宽度,作为典型的数独式布局。如有任何建议,我们将不胜感激。

最佳答案

正如我之前的评论中所述,我将使用堆叠布局,其中框位于框架中,条目位于这些框中。所以不需要特殊的造型。访问 ttk.Entries 中的值会给出一个包含 tk.StringVar 对象的字典,键是大写字母“A”..“I”与数字“组合” 1'..'9' 就像电子表格应用程序中一样:

import tkinter as tk
from tkinter import ttk

mainWin = tk.Tk()
mainWin.title('Sudoku solver')

mainFrame = ttk.Frame(mainWin, borderwidth=10)
mainFrame.grid(column=1, row=1)

# access to entries (of type tk.StringVar)
values = {}

for box_col in range(3):
    for box_row in range(3):
        box = ttk.Frame(mainFrame, borderwidth=1, relief='sunken')
        box.grid(column=box_col+1, row=box_row+1)
        for cell_col in range(3):
            for cell_row in range(3):
                v = tk.StringVar()
                # build spreadsheet key from overall column and row
                col = 'ABCDEFGHI'[3*box_col+cell_col]
                row = '123456789'[3*box_row+cell_row]
                key = col+row
                values[key] = v
                entry = ttk.Entry(box, width=3, justify='center', textvariable=v)
                entry.grid(column=cell_col+1, row=cell_row+1)

# example for accessing the entries
values['A1'].set(1)
values['G3'].set(7)
values['E5'].set(int(values['A1'].get())+4)
values['I9'].set(int(values['E5'].get())+4)

mainWin.mainloop()

在 Windows 8.1 下,这将如下所示:

Screenshot of an example configuration

关于python-3.x - 如何仅更改 ttk.Entry 的一侧边框宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67089235/

相关文章:

python - 如何比较多个键值对的两个字典列表?

python-3.x - 新型信号和插槽支持,PyQt

python - 强制从 URL 下载图像的最长时间

python - 如何在 tkinter 文本小部件中突出显示文本

python - 按下按钮后多次更改 tkinter 输入小部件

python-3.x - 使用 keras 实现高斯混合模型

python - 重复打开和销毁窗口时使用全局变量的问题

python - 为什么 Matplotlib savefig 图像重叠?

Python Tkinter 输入板文本

python - 如何验证 Entry 小部件的内容?