使用.csv项填充列表框

时间:2017-08-19 22:11:54

标签: python-3.x csv tkinter listbox scrollbar

我有这个。

scrollbar = tk.Scrollbar(listbox)
scrollbar.pack(side=RIGHT, fill=Y)

listbox = tk.Listbox(root)
listbox.insert(1,'a')
listbox.pack()

listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)

with open('testCUR.csv', newline='') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in spamreader:
        print(', '.join(row),'\n')

我想知道如何使用.csv文件中的值正确填充列表框?

还有为什么我不能正确使用滚动条?

填充列表框后,我想将选择中最后一个单元格的值放入变量中,以便在URL字符串中使用。我还没有找到任何教程,所以在这里寻求帮助。

我试过这个。

listbox = tk.Listbox(root, height=1)

listbox.place(x=300,y=75)


with open('testCUR.csv', 'r') as f:
  reader = csv.reader(f)
  your_list = list(reader)
  for item in your_list:

    listbox.insert(end, item)

或者只输入第一个条目

with open('testCUR.csv', 'r') as f:
  reader = csv.reader(f)
  your_list = list(reader)
  for item in your_list:

    listbox.insert(1, item)

一旦我在列表框中显示了所有值,并且它是可滚动的,如果它只是该死的我会喜欢它。

listbox = tk.Listbox(root, height=1, scroll=auto)

我需要能够仅使用货币代码作为.csv文件中的最后一个值,并将其用作选定值,然后将其用于url的变量中。 .csv文件看起来像这样。

Algeria د.ج DZD
Andorra €   EUR
Angola  Kz  AOA
Anguilla    $   XCD
Antigua and Barbuda $   XCD
Argentina   $   ARS
Armenia     AMD
Aruba   ƒ   AWG
Ascension Island    £   (*none*)

我也在尝试大熊猫,但我是新手,因为它看起来更容易使用。

csv_file = ('testCUR.csv')

df = pd.read_csv(csv_file)

saved_col = df['CODE']

for item in df:
    listbox.insert(end, saved_col)

始终错误。 NameError:未定义名称“end”。 发生在END也

1 个答案:

答案 0 :(得分:2)

  

我想知道如何使用.csv文件中的值正确填充列表框?

要将文本插入列表框,您必须为其指定一个索引以告知其插入位置。索引是一个数字或字符串"end"的字符串。在您的情况下,您使用了名为end的变量,该变量当然不存在。

您可以插入如下文字:

listbox.insert("end", item)
  

还有为什么我不能正确使用滚动条?

您还没有描述滚动条不正确的原因。

滚动条的工作原理需要双向对话。必须告知滚动条要滚动的窗口小部件(通过command属性,窗口小部件需要知道滚动时要更新的滚动条(通过yscrollcommandxscrollcommand属性)。

明确设置滚动条是水平还是垂直也很好,但在您的情况下它是垂直的,这是默认值。

最后,通常最好的做法是使滚动条和小部件滚动到同一个父级。您错误地将滚动条设为列表框的子项。相反,让它成为列表框是孩子的孩子。在创建列表框之前,您还错误地尝试将其设为列表框的父级。小部件必须存在才能为其提供子级。

以下是创建列表框和滚动条的方法:

listbox = tk.Listbox(root)
scrollbar = tk.Scrollbar(root, orient="vertical", command=listbox.yview)
listbox.configure(yscrollcommand=scrollbar.set)