python - 使单元格适合文本(并使其只读)
问题描述
我开始使用 TkinterTable 并且正在逐步使用 Tkinter 功能,所以我很菜鸟。我正在尝试显示来自某些来源的一些数据,但我担心单元格似乎比文本短,我找不到使单元格适合文本大小的方法。这是我的代码:
from tkinter import *
from tkintertable import TableCanvas, TableModel
data = {'1': {'Source': 'OB', 'Campaign': 'X7765LKBTYYU-TAB-US', 'Impr.': 9457123, 'CTR': '0.12%', 'Spent': 45.78},
'2': {'Source': 'OB', 'Campaign': 'X6159TNFYTHY-PHONE-US-A', 'Impr.': 5456953, 'CTR': '0.27%', 'Spent': 12.52},
'3': {'Source': 'OB', 'Campaign': 'X7765LGKJHYRT-TAB-US', 'Impr.': 9457123, 'CTR': '0.12%', 'Spent': 45.78},
'4': {'Source': 'OB', 'Campaign': 'X6159FTJKYUKKX-PHONE-US-A', 'Impr.': 5456953, 'CTR': '0.27%', 'Spent': 12.52}
}
root= Tk()
tframe = Frame(root)
tframe.pack()
model = TableModel()
table = TableCanvas(tframe, model=model, data=data, editable=False, width=800, height=300)
table.show()
root.mainloop()
顺便说一句,不是我的主要问题,但如果你有一个快速的解决方案,将不胜感激。您会注意到我在 TableCanvas 中设置了“editable=False”,但这似乎并没有使单元格成为只读,我仍然可以编辑它们。知道为什么吗?
谢谢,
解决方案
快速浏览一下 py 源码:
class TableCanvas(Canvas):
"""A tkinter class for providing table functionality"""
def __init__(self, parent=None, model=None, data=None, read_only=False,
width=None, height=None,
rows=10, cols=5, **kwargs):
...
def adjustColumnWidths(self):
"""Optimally adjust col widths to accomodate the longest entry
in each column - usually only called on first redraw"""
...
def autoResizeColumns(self):
"""Automatically set nice column widths and draw"""
...
对于您的第一个问题,该方法似乎adjustColumnWidths
没有正确处理长字符串(可能是特定于平台的?)。无需深入研究,最简单的方法是覆盖该方法:
class CustomCanvas(TableCanvas):
def adjustColumnWidths(self):
try:
fontsize = self.thefont[1]
except:
fontsize = self.fontsize
scale = 8.5 * float(fontsize)/12
for col in range(self.cols):
colname = self.model.getColumnName(col)
if colname in self.model.columnwidths:
w = self.model.columnwidths[colname]
else:
w = self.cellwidth
maxlen = self.model.getlongestEntry(col)
size = maxlen * scale
if size < w:
continue
#if size >= self.maxcellwidth:
# size = self.maxcellwidth
self.model.columnwidths[colname] = size*1.2 #I changed the calculation to a static float
return
然后CustomCanvas
用作您的TableCanvas
.
对于可编辑部分,不确定您从哪里得到editable
作为参数传递的想法。如果您使用read_only=True
它应该可以按预期工作。
推荐阅读
- flutter - flutter_reactive_ble - 如何在订阅前检查设备是否已连接
- initialization - 在 VHDL 中分配给端口的初始化端口/信号的优先级
- php - 累积布局移位 (CLS) 问题。在 wordpress 主题中
- java - 如何使用 XZ for Java 添加 ZipEntry
- qt - 未加载 QPSQL 驱动程序(Qt6、Postgres-13)
- mysql - 将销售分组到非日历月
- python - 在 python 中过滤关于特定国家的推文
- pytorch - 在 TorchScript 中跟踪张量大小
- java - 在java中使用正则表达式从基于下划线的字符串中获取子字符串
- node.js - 管理nodejs多个超时会话