Python Tkinter中单元格中包含图片的列表或表格的小部件
我需要一个小部件,就像一个列列表。单元格的值可以是整数、字符串或图片 Tkinter ownPython Tkinter中单元格中包含图片的列表或表格的小部件,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我需要一个小部件,就像一个列列表。单元格的值可以是整数、字符串或图片 Tkinter own列表框不能有列。Treeview无法将图片作为值(第一列#0除外) 有适合我需要的Tkinter扩展吗?或者我怎么能自己创造这样的东西 可以用作答案基础的一些示例代码 #!/usr/bin/env python3 from tkinter import * from tkinter import ttk from PIL import Image from PIL import ImageTk if
列表框不能有列。Treeview
无法将图片作为值(第一列#0
除外)
有适合我需要的Tkinter扩展吗?或者我怎么能自己创造这样的东西
可以用作答案基础的一些示例代码
#!/usr/bin/env python3
from tkinter import *
from tkinter import ttk
from PIL import Image
from PIL import ImageTk
if __name__ == '__main__':
root = Tk()
# or a Listbox!!!
tree = ttk.Treeview(root,
columns = ('one'))
tree.heading('one', text='one')
tree.pack()
tree.img = Image.new(mode='RGBA', size=(10, 20), color='red')
tree.img = ImageTk.PhotoImage(tree.img)
for i in range(50):
tree.insert(parent='',
index=END,
image=tree.img,
text='',
values = i)
root.mainloop()
可以使用Label
s创建网格类来显示整数、字符串和图像:
try: # In order to be able to import tkinter for
import tkinter as tk # either in python 2 or in python 3
except ImportError:
import Tkinter as tk
class LabelGrid(tk.Frame):
"""
Creates a grid of labels that have their cells populated by content.
"""
def __init__(self, master, content=([0, 0], [0, 0]), *args, **kwargs):
tk.Frame.__init__(self, master, *args, **kwargs)
self.content = content
self.content_size = (len(content), len(content[0]))
self._create_labels()
self._display_labels()
def _create_labels(self):
def __put_content_in_label(row, column):
content = self.content[row][column]
content_type = type(content).__name__
if content_type in ('str', 'int'):
self.labels[row][column]['text'] = content
elif content_type == 'PhotoImage':
self.labels[row][column]['image'] = content
self.labels = list()
for i in range(self.content_size[0]):
self.labels.append(list())
for j in range(self.content_size[1]):
self.labels[i].append(tk.Label(self))
__put_content_in_label(i, j)
def _display_labels(self):
for i in range(self.content_size[0]):
for j in range(self.content_size[1]):
self.labels[i][j].grid(row=i, column=j)
if __name__ == '__main__':
root = tk.Tk()
img = tk.PhotoImage(file="13.gif") # replace with your image
label_grid = LabelGrid(root, ([3, img], ['my_string', 7]))
label_grid.pack()
tk.mainloop()
我认为您不应该只使用python-3.x,除非问题是特定于python-3的。你不必要地缩小了你的听众范围。编辑。我相信,\u display\u labels
中的self.labels.append(list())
太过分了,不是吗?@VadimShkaberda是的,我想是的。谢谢,我把它拿走了。