我目前在Tinker中的输出有问题。因此,每当我尝试输出从文件中读取的数据时,输出对话框太小,无法容纳庞大的数据列表。例如:
窗口太大而无法显示我的所有数据,因此我尝试为窗口添加滚动条,以便更好地适应数据并轻松查看所有数据。
问题出现在我的代码中:
from Tkinter import *
import tkSimpleDialog
import tkMessageBox
root = Tk()
w = Label(root, text ="my Program")
w.pack()
tkMessageBox.showinfo("Welcome", "Add your welcome message here")
with open("Logs.txt", "rb") as f_input:
start_token = tkSimpleDialog.askstring("Serial Number", "What is the device serial number?")
end_token = tkSimpleDialog.askstring("End Keyword", "What is the end keyword")
reText = re.search("%s(.*?)%s" % (re.escape(start_token + ",SHOWALL"), re.escape(end_token)), f_input.read(), re.S)
if reText:
output = reText.group(1)
scrollbar = Scrollbar(root)
scrollbar.pack( side = RIGHT, fill=Y, expand = False)
mylist = Listbox(root, yscrollcommand = scrollbar.set )
mylist.insert(END, output)
mylist.pack( side = LEFT, fill = Y, expand = False)
scrollbar.config( command = mylist.yview )
mainloop()
# tkMessageBox.showinfo("Output", output)
print output
else:
print "not found"
当我添加滚动条时,我将其作为输出:
所以我要做的是将数据放在一个带有滚动条的漂亮窗口对话框中。
这是输出:
APN=""
APU=""
APP=""
DDC=
FMT=""
HDR=
AKR=
AKT=
AKP=
PMR=
PKA=
PHN=""
PHS=""
HBI=
PMF=
PMN=
PRN=
PRF=
RET=
SFR=
SFT=
SXD=
SXV=
SXW=
SXX=
SPM=
VIT=
VID=
VPT=
ATN=
ATF=
AMT=
AMD=
LGF=
GPA=
GFN=
GFO=
GDN=
GDF=
GPN=
SCN=
SCO=
SCP=
AEE=
AET=
AES=
OUA=
BWP=
MSO=
UPE=
UPC=
UPT=
VAA=
VAR=
VAI=
IVJ=
IGM=
IGA
IGB=
IGC=
IGD=
IGE=
IGF=
VOW=
VWD=
答案 0 :(得分:2)
我认为您需要更改output
插入Listbox
的方式,假设其内容为换行符(如更新后的问题所示)。
documentation将insert()
方法的调用顺序显示为:
插入(索引,*元素)
所以一种方法就是多次调用它,每个元素调用一次,循环:
for element in output.splitlines():
mylist.insert(END, element)
但是,文档中第二个参数的*
前缀意味着该方法接受从该点开始的变量个参数(每个参数将被放在一个单独的位置)线)。
这意味着可以在一次通话中完成同样的事情:
mylist.insert(END, *output.splitlines())
这样做首先将output
数据分成基于其中新行的列表,然后通过前缀在方法调用中将它们作为一组单独的参数传递结果从output.splitlines()
返回*
,这会导致它被“解包”为多个调用参数。
这是一个相当常见的Python习语,因此值得学习和记忆。请参阅文档中的Unpacking Argument Lists。