我正在尝试整理我的第一个小程序,但我一直遇到一些困难。我正在使用来自SQLite DB的数据,但我将代码更改了一下,以便在没有DB本身的情况下可以使用它。 list_base
和List_sold_at_base
函数通常会从数据库中提取数据(来自Freelancer游戏的基础和商品信息,因此我可以列出哪些商品在哪个基础上销售)。
该计划应该做的是在“基地”基础上建立所有基地的清单。按下按钮并将其放在Combobox
中。
从Combobox
中选择一个选项时,此选择应存储在变量v
中,并在选择其他基础时更新。这有效。到目前为止,变量v
是str
类型。
Goods sold at base
按钮调用一个函数,该函数使用v
并使用它来检查de DB在此基础上销售的商品,并将其打印在列表中。
但是,现在变量v
不再是字符串类型(它应该是函数正常工作),而是instance
。不知何故,这会改变,但我无法弄清楚在哪里和为什么。我提出了几个印刷陈述,看看如何以及在哪里,但他们并没有真正展示这一切。
from Tkinter import *
import csv, sqlite3, sys
from ttk import Combobox
root = Tk()
v = StringVar()
def on_field_change(index, value, op):
print "combobox updated to ", boxBases.get()
v = boxBases.get()
print 'v is', v
print type(v)
def List_bases():
dropdownBases = []
for i in ['base1', 'base2', 'base3', 'base4',]:
dropdownBases.append(i)
return dropdownBases
def List_sold_at_base(selbase):
goodsSoldAtBase = []
sb=selbase
print "selbase value (v) is", selbase
print "selbase type is ", type(selbase)
dataFromDB = [['base1', 'Cobalt 275', 'Copper 180'],['base2', 'High Temp Alloy 280', 'Mining Machinery 130'], ['base3', 'H-Fuel 240', 'Oxygen 6', 'Water 18'], ['base4', 'Hydrocarbons 40', 'Polymers 107']]
for i in dataFromDB:
if i[0] == sb:
goodsSoldAtBase.append(i)
print "goods sold at base list: ", goodsSoldAtBase
print " "
print v
print type(v)
def base():
dropdownBases = List_bases()
boxBases.config(values=dropdownBases)
print "bases!"
def goods():
List_sold_at_base(v)
print '=========='
dropdownBases = []
v.trace('w',on_field_change)
boxBases = Combobox(root, textvar=v, values=dropdownBases)
boxBases.grid(row=4, column=3, sticky='w', padx=5, pady=5)
baseButton=Button(root, text="bases", command=base)
baseButton.grid(row=3, column=0, sticky='w', padx=5, pady=5)
goodsButton = Button(root, text="Goods sold at base", command=goods)
goodsButton.grid(row=3, column=2, sticky='w', padx=5, pady=5)
root.mainloop()
答案 0 :(得分:0)
感谢您的投入。我通过尝试更多地使用.get()并取出基本上只调用另一个函数的1个函数来实现它。我剪掉了中间人(货物())。
from Tkinter import *
import csv, sqlite3, sys
from ttk import Combobox
root = Tk()
v = StringVar()
def on_field_change(index, value, op):
v = boxBases.get()
print 'v is', v
def List_bases():
dropdownBases = []
for i in ['base1', 'base2', 'base3', 'base4',]:
dropdownBases.append(i)
return dropdownBases
def List_sold_at_base():
goodsSoldAtBase = []
sb=v.get()
dataFromDB = [['base1', 'Cobalt 275', 'Copper 180'],['base2', 'High Temp Alloy 280', 'Mining Machinery 130'], ['base3', 'H-Fuel 240', 'Oxygen 6', 'Water 18'], ['base4', 'Hydrocarbons 40', 'Polymers 107']]
for i in dataFromDB:
if i[0] == sb:
goodsSoldAtBase.append(i)
print "goods sold at base list: ", goodsSoldAtBase
def base():
dropdownBases = List_bases()
boxBases.config(values=dropdownBases)
print "bases!"
dropdownBases = []
v.trace('w',on_field_change)
boxBases = Combobox(root, textvar=v, values=dropdownBases)
boxBases.grid(row=4, column=3, sticky='w', padx=5, pady=5)
baseButton=Button(root, text="bases", command=base)
baseButton.grid(row=3, column=0, sticky='w', padx=5, pady=5)
goodsButton = Button(root, text="Goods sold at base", command=List_sold_at_base)
goodsButton.grid(row=3, column=2, sticky='w', padx=5, pady=5)
root.mainloop()