2017-03-10 97 views
0

我已经编写了代码来显示tkinter中的sql查询中的数据。从搜索函数中,我想打印出一行中元组中的第一项,然后将其余结果打印在另一行上。我知道元组中的每个元组都有四个数据项(日期,名称,开始时间,结束时间),但我无法弄清楚如何使它正常工作。如何以不同顺序打印元组元组中的每个元素

def searched(): 
    Main_Screen.configure(state = 'normal') 
    Main_Screen.delete('1.0', END) 
    searched_for = search.get() 
    timeslot = cursor.execute('''SELECT * FROM dates WHERE Name = (?)''',(searched_for,)) 
    list1 = list(cursor.fetchall()) 
    print(list1) 
    cursor.execute('''SELECT COUNT(*) FROM dates WHERE Name = (?) ''',(searched_for,)) 
    result = cursor.fetchone()[0] 
    print(result) 
    n = 1 
    m = 1 
    for i in range(0, result - 1): 
     my_variable = list1[m-1][n-1] 
     Main_Screen.insert(tkinter.END,my_variable) 
     Main_Screen.insert(tkinter.END, "\n") 
     for i in range(0,3): 
      my_var2 = list1[m-1][2-1] 
      Main_Screen.insert(tkinter.END,my_var2) 

      my_var3 = list1[m-1][3-1] 
      Main_Screen.insert(tkinter.END,my_var3) 

      my_var4 = list1[m-1][4-1] 
      Main_Screen.insert(tkinter.END,my_var3) 

      Main_Screen.insert(tkinter.END, "\n") 
      m = m + 1 

例如,我搜索名称为'test'的所有东西。我收到这份名单是:

[('2017-07-14', 'test', '11:00:00', '13:00:00'), ('2017-07-21', 'test', '11:00:00', '13:00:00'), ('2017-07-28', 'test', '11:00:00', '13:00:00'), ('2017-08-04', 'test', '11:00:00', '13:00:00'), ('2017-08-11', 'test', '11:00:00', '13:00:00'), ('2017-03-10', 'test', '12:00:00', '14:00:00')] 

6(how many are in the main tuple) 

但是当打印到GUI:

2017-07-14 
test11:00:0011:00:00 
test11:00:0011:00:00 
test11:00:0011:00:00 
2017-08-04 
test11:00:0011:00:00 
test11:00:0011:00:00 
test12:00:0012:00:00 

我想要什么:

Date of timeslot 
Name of Timeslot 
Start Time 
End Time 

而且由于某种原因,我得到这个错误:

File "C:\Users\dansi\AppData\Local\Programs\Python\Python36-32\gui test 3.py", line 124, in searched 
my_variable = list1[m-1][n-1] 
IndexError: list index out of range 

编辑=

def searched(): 
    Main_Screen.configure(state = 'normal') 
    Main_Screen.delete('1.0', END) 
    searched_for = search.get() 
    timeslot = cursor.execute('''SELECT * FROM dates WHERE Name = (?)''',(searched_for,)) 
    list1 = list(cursor.fetchall()) 
    print(list1) 
    cursor.execute('''SELECT COUNT(*) FROM dates WHERE Name = (?) ''',(searched_for,)) 
    result = cursor.fetchone()[0] 
    print(result) 
    for tuple_vars in list1: 
     for var0, var1, var2 ,var3 in tuple_vars: 
      header = '{}\n'.format(var0) 
      Main_Screen.insert(tkinter.END, header) # ADD SOME FORMATTING 
      output = '{}\n{}\n{}\n{}\n'.format(var1, var2, var3) 
      Main_Screen.insert(tkinter.END, output) 

for i in range(0, result - 1): 
    Main_Screen.insert(tkinter.END, "\n") 

,并得到新的错误:

File "C:\Users\dansi\AppData\Local\Programs\Python\Python36-32\gui test 3.py", line 122, in searched 
for var0, var1, var2 ,var3 in tuple_vars: 
ValueError: too many values to unpack (expected 4) 
+0

你忘了给你的'Main_Screen.insert'添加更多的''\ n“'s我想。 –

+0

所以你展示的例子是'list1'包含的是什么? – Roelant

+0

分隔每一行,但由于某种原因得到一个错误。病毒更新的问题,以显示它@AshishNitinPatil – pythonsnake

回答

3

从未使用过的Tkinter,但想将其发送到Tkinter的面前,你可以格式化整个字符串:如果真

for tuple_vars in list1: 
    output = '{}\n{}\n{}\n{}\n'.format(*tuple_vars) 
    Main_Screen.insert(tkinter.END, output) 

应工作

list1 = [('2017-07-14', 'test', '11:00:00', '13:00:00'), 
     ('2017-07-21', 'test', '11:00:00', '13:00:00')] 

要做到这一点在两个步骤

for var1, var2, var3, var4 in list1: 
    header = '{}\n'.format(var1) 
    Main_Screen.insert(tkinter.END, header) # ADD SOME FORMATTING 
    output = '{}\n{}\n{}\n'.format(var2, var3, var4) 
    Main_Screen.insert(tkinter.END, output) 
+0

谢谢,它的作品:)我知道这可能很难做,但我想有比其他人的日期更大,比如一个标题。你知道如何用你的方法首先选择它,或者不知道。 – pythonsnake

+0

哈哈,不知道你如何在tkinter中大胆(也许看到http://stackoverflow.com/questions/40237671/python-tkinter-single-label-with-bold-and-normal-text),但分裂应该很容易。看我的编辑。 – Roelant

+0

感谢@Roelant的回复。我有点困惑于如何结合你的两条喉咙。第一个为列表中的每个人工作,而第二个人是一个元组。我如何将他们结合起来做主元组中的每一个?更新问题以显示更新的代码和新的错误。 – pythonsnake

相关问题