使用一长串数据向 Tkinter 添加滚动条

Adding a scroll bar to Tkinter with a long list of data

我目前在 Tinker 中的输出有问题。因此,每当我尝试输出从文件中读取的数据时,输出对话框都太小而无法容纳庞大的数据列表。例如:

window 太大,无法显示我的所有数据,因此我考虑为 window 添加滚动条,以便更好地适应数据并轻松查看所有数据。

问题出现在我的代码中:

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"

当我添加滚动条时,我得到他的作为输出:

所以我想做的是将数据放入一个带有滚动条的漂亮 window 对话框中。

这是输出:

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=

我认为您需要更改 output 插入 Listbox 的方式,假设其内容是换行符分隔的(如您更新的问题所示)。

documentation表示insert()方法的调用顺序为:

插入(索引,*元素)

所以一种做事的方法是在一个循环中多次调用它,每个元素调用一次:

for element in output.splitlines():
    mylist.insert(END, element)

但是,文档中第二个参数的 * 前缀意味着该方法接受从该点开始的 变量 个参数(每个参数将放在单独的一行)。

这意味着同一件事可以在一次调用中完成:

mylist.insert(END, *output.splitlines())

首先根据其中的换行符将 output 数据拆分成一个列表,然后将它们作为一堆 单独的参数 传递到通过在 output.splitlines() 返回的结果前加上 * 前缀来调用方法,这导致它 "unpacked" 成为多个调用参数。

这是一个比较常见的Python成语,值得学习和记忆。请参阅文档中的 Unpacking Argument Lists