在这个简单的例子中,我想将标签显示为 “1 3”:Python的打印{}而不是一个空的空间 - Tkinter的
import tkinter
window = tkinter.Tk()
A = [1," ", 3]
label = tkinter.Label(window, text = A[0:])
label.pack()
window.mainloop()
然而,蟒显示 “1 {} 3”代替。
问题在哪里?
在这个简单的例子中,我想将标签显示为 “1 3”:Python的打印{}而不是一个空的空间 - Tkinter的
import tkinter
window = tkinter.Tk()
A = [1," ", 3]
label = tkinter.Label(window, text = A[0:])
label.pack()
window.mainloop()
然而,蟒显示 “1 {} 3”代替。
问题在哪里?
乔纳森和罗恩·诺里斯已经说了,你需要一个字符串传递给Label
构造函数的参数text
。
我会建议您异类列表转换为字符串正是如此:
A = [1," ", 3]
labeltext = ''.join(map(str, A))
label = tkinter.Label(window, text = labeltext)
map
:map documentation for python 3str
:str documentation for python 3string
的join
方法:string join method, python 3编辑:既然你问了一个办法做到这一点在许多代码位置,用最少的代码改变,我会建议身边tkinter.Label
此包装:
def createlabel(*args, **kwargs):
if 'text' in kwargs and isinstance(kwargs['text'], list):
kwargs['text'] = ''.join(map(str, kwargs['text']))
return tkinter.Label(*args, **kwargs)
该功能将通过其所有参数不变为tkinter.Label
,但要注意将text
关键字参数转换为字符串(如果它是列表)。
当你定义了这个,在你的编辑器中使用“Find & Replace”函数来替换tkinter.Label
和createlabel
。
您的原稿可能会被转换这样的,例如:
import tkinter
def createlabel(*args, **kwargs):
if 'text' in kwargs and isinstance(kwargs['text'], list):
kwargs['text'] = ''.join(map(str, kwargs['text']))
return tkinter.Label(*args, **kwargs)
window = tkinter.Tk()
A = [1," ", 3]
label = createlabel(window, text = A[0:])
label.pack()
window.mainloop()
正如我上面评论的那样,在原来的程序中,我实际上有71个不同的列表和标签......是否有另一种方法,我不需要这71次? –
@JindraKocman我通过回答编辑,提供了一种在很多代码位置轻松完成此操作的方法(通过使用函数和查找和替换) – Odysseas
A[0:]
是一种异质列表,tkinter.Label的文档表明,其text
参数应接收一个字符串(单词“text”也相当强烈暗示) https://docs.python.org/3/library/tkinter.ttk.html#label-options
如果你想“1 3”尝试:
A = [1," ", 3]
s = ''
for c in A:
s += str(c)
label = tkinter.Label(window, text = s)
然而,这在我的原始程序中有效,我有71个列表,这些列表在71个标签中显示,并且写下这71次会是一个痛苦...有没有其他选择? –
您可以对功能进行重复操作。所以当你创建标签时,他们都会经历同样的逻辑。 –
为什么你没得到 “[1 '' 3]”? –
@LaurentLAPORTE:因为潜在的tkinter是一个tcl解释器,并且tcl将对待列表的方式与python不同。花括号表明你看到的是一个列表转换为字符串的tcl表示,其中转换是由tcl而不是python完成的。 –