[英]How to insert image and values from sqllite3 into tkinter treeview the right way?
我正在嘗試從 sqllite3 數據庫中獲取圖像和一些值並將它們插入到 Tkinter Treeview 中,但是我遇到了 position 的問題,因此如何正確放置圖像的每個列的大小值在正確的位置並調整圖像大小,使其適合右列。
很抱歉代碼太長,但我正在努力澄清這個問題
我的代碼腳本:
#load image
def filedialogs(self):
global filename, img, images
f_types = [("png", "*.png"), ("jpg", "*.jpg"), ("Allfile", "*.*")]
filename = filedialog.askopenfilename(filetypes=f_types)
img = Image.open(filename)
img = img.resize((365, 270), Image.ANTIALIAS)
img = ImageTk.PhotoImage(img)
# added infos,image into db
def Add_car(self):
global img, filename
self.fob = open(filename, 'rb')
self.fob = self.fob.read()
entities = (self.makecb.get(),self.modelcb.get(), self.Yearcb.get(),self.lincesplatenum.get(),self.price.get(),self.price.get())
self.con = sqlite3.connect('car dealership.db')
self.cursorObj = self.con.cursor()
self.cursorObj.execute(
'''INSERT INTO Vechicle_info(carmake, carmodel, caryear,carlincesplatenum, image,price) VALUES(?,?,?,?,?,?)''',
entities)
self.con.commit()
self.cursorObj.close()
def expenses(self):
self.carstoselecet_expensetree = ttk.Treeview(self.cartoselectframe,columns=["image", "price", "licenseplate", "year","model", "brand"])
self.carstoselecet_expensetree.pack()
self.carstoselecet_expensetree.heading("brand", text="car brand")
self.carstoselecet_expensetree.heading("model", text="car model")
self.carstoselecet_expensetree.heading("year", text="car year")
self.carstoselecet_expensetree.heading("licenseplate", text="car licenseplate")
self.carstoselecet_expensetree.heading("price", text="car price")
self.carstoselecet_expensetree.heading("image", text="car image")
self.carstoselecet_expensetree.column("brand", width=125)
self.carstoselecet_expensetree.column("model", width=100)
self.carstoselecet_expensetree.column("year", width=100)
self.carstoselecet_expensetree.column("licenseplate", width=100)
self.carstoselecet_expensetree.column("price", width=100)
self.carstoselecet_expensetree.column("image",width=500)
self.cursorObj = self.con.cursor()
self.my_row=self.cursorObj.execute('SELECT image, price, carlincesplatenum, caryear, carmodel, carmake FROM Vechicle_info')
self.cars_expense_output = self.cursorObj.fetchall()
# fetch values from db and insert them into treeview
self.imglist=[]
for record in self.cars_expense_output:
img=ImageTk.PhotoImage(data=record[0])
self.carstoselecet_expensetree.insert("",END,image=img,values=record[1:])
self.imglist.append(img)
self.con.commit()
有幾個問題:
self.price.get()
在entities
中使用了兩次,第一個應該是self.fob
image
列,因為圖像顯示在樹列“#0”中rowheight
的 rowheight 設置為圖像的高度以下是修復上述問題的修改代碼:
#load image
def filedialogs(self):
f_types = [("png", "*.png"), ("jpg", "*.jpg"), ("Allfile", "*.*")]
filename = filedialog.askopenfilename(filetypes=f_types)
img = Image.open(filename)
img = img.resize((365, 270), Image.ANTIALIAS)
# save the resized image to self.fob
with io.BytesIO() as f:
img.save(f, 'PNG')
self.fob = f.getvalue()
# added infos,image into db
def Add_car(self):
# changed first self.price.get() to self.fob
entities = (self.makecb.get(), self.modelcb.get(), self.Yearcb.get(), self.lincesplatenum.get(), self.fob, self.price.get())
self.con = sqlite3.connect('car dealership.db')
self.cursorObj = self.con.cursor()
self.cursorObj.execute(
'''INSERT INTO Vechicle_info (carmake, carmodel, caryear, carlincesplatenum, image, price) VALUES (?,?,?,?,?,?)''',
entities)
self.con.commit()
self.cursorObj.close()
def expenses(self):
# removed image column
self.carstoselecet_expensetree = ttk.Treeview(self.cartoselectframe,columns=["price", "licenseplate", "year","model", "brand"])
self.carstoselecet_expensetree.pack()
# set treeview rowheight option
s = ttk.Style()
s.configure('Treeview', rowheight=270)
self.carstoselecet_expensetree.heading("brand", text="car brand")
self.carstoselecet_expensetree.heading("model", text="car model")
self.carstoselecet_expensetree.heading("year", text="car year")
self.carstoselecet_expensetree.heading("licenseplate", text="car licenseplate")
self.carstoselecet_expensetree.heading("price", text="car price")
self.carstoselecet_expensetree.heading("#0", text="car image") # changed "image" to "#0" (tree column)
self.carstoselecet_expensetree.column("brand", width=125)
self.carstoselecet_expensetree.column("model", width=100)
self.carstoselecet_expensetree.column("year", width=100)
self.carstoselecet_expensetree.column("licenseplate", width=100)
self.carstoselecet_expensetree.column("price", width=100)
self.carstoselecet_expensetree.column("#0",width=400) # changed "image" to "#0" (tree column)
self.cursorObj = self.con.cursor()
self.my_row = self.cursorObj.execute('SELECT image, price, carlincesplatenum, caryear, carmodel, carmake FROM Vechicle_info')
self.cars_expense_output = self.cursorObj.fetchall()
# fetch values from db and insert them into treeview
self.imglist=[]
for record in self.cars_expense_output:
img=ImageTk.PhotoImage(data=record[0])
self.carstoselecet_expensetree.insert("",END,image=img,values=record[1:])
self.imglist.append(img)
self.con.commit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.