2017-10-15 55 views
0

在这个简单的例子中,我想将标签显示为 “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”代替。

问题在哪里?

+0

为什么你没得到 “[1 '' 3]”? –

+1

@LaurentLAPORTE:因为潜在的tkinter是一个tcl解释器,并且tcl将对待列表的方式与python不同。花括号表明你看到的是一个列表转换为字符串的tcl表示,其中转换是由tcl而不是python完成的。 –

回答

1

乔纳森和罗恩·诺里斯已经说了,你需要一个字符串传递给Label构造函数的参数text

我会建议您异类列表转换为字符串正是如此:

A = [1," ", 3] 
labeltext = ''.join(map(str, A)) 
label = tkinter.Label(window, text = labeltext) 

编辑:既然你问了一个办法做到这一点在许多代码位置,用最少的代码改变,我会建议身边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.Labelcreatelabel

您的原稿可能会被转换这样的,例如:

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() 
+0

正如我上面评论的那样,在原来的程序中,我实际上有71个不同的列表和标签......是否有另一种方法,我不需要这71次? –

+0

@JindraKocman我通过回答编辑,提供了一种在很多代码位置轻松完成此操作的方法(通过使用函数和查找和替换) – Odysseas

1

如果你想“1 3”尝试:

A = [1," ", 3] 
s = '' 
for c in A: 
    s += str(c) 

label = tkinter.Label(window, text = s) 
+0

然而,这在我的原始程序中有效,我有71个列表,这些列表在71个标签中显示,并且写下这71次会是一个痛苦...有没有其他选择? –

+0

您可以对功能进行重复操作。所以当你创建标签时,他们都会经历同样的逻辑。 –