我正在嘗試將我的第一個小程序放在一起,但我一直有一些困難。我正在使用來自SQLite數據庫的數據,但是我稍微改變了一下代碼,所以沒有數據庫本身就可以使用。 list_base
和List_sold_at_base
函數通常會從數據庫中提取數據(Freelancer遊戲中的基礎和商品信息,因此我可以列出在什麼基礎上銷售的商品)。從字符串到實例的變量值更改
該程序應該做的是建立一個所有基地列表,當'基地'按鈕被按下,並把它放在Combobox
。
當從Combobox
中選擇一個選項時,該選項應存儲在變量v
中,並在選擇另一個基準時更新。這工作。變量v
到目前爲止是str
類型。
Goods sold at base
按鈕調用一個函數,該函數需要v
並使用它來檢查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()
的[Tkinter的IntVar返回代替值PY \ _VAR0]可能的複製(http://stackoverflow.com/questions/24768455/tkinter-intvar-returning-py-var0-instead-of-value) – nbro
謝謝,我稍後再看看! – Bowerick
我不明白你爲什麼要改變它爲字符串?你可以總是使用'v.get()'來獲取它的值,並使用'v.set(「new_value」)'來改變它的值。 – Lafexlos