嗨,我是wxpython新手。 还有我上载问题但尚未解决的一个星期。
所以今天我需要更多有关我的问题的帮助
这是代码....
# -*- coding:utf-8 -*-
import wx
import sqlite3
from PIL import Image # for image processing
from wx.adv import Animation, AnimationCtrl # for gif Animation
conn = sqlite3.connect('reference_file.rre')
cur = conn.cursor()
class MyApp(wx.App):
def OnInit(self):
self.frame = errorCode_SAC(None, title ="Guide")
self.SetTopWindow(self.frame)
self.frame.Show()
return True
class errorCode_SAC(wx.Frame):
# constructor
def __init__(self, parent, id=wx.ID_ANY, title="Search", pos=wx.DefaultPosition, size=(1500,650), style=wx.DEFAULT_FRAME_STYLE, name=""):
super(errorCode_SAC, self).__init__(parent, id, title, pos, size, style, name="")
self.Panel_err_sac = wx.Panel(self,wx.ID_ANY, pos=(0,0), size=(774, 608))
self.Panel_dd = wx.Panel(self, wx.ID_ANY, pos=(777,0), size=(1,608))
self.Panel_err_sac_result = wx.Panel(self,wx.ID_ANY, pos=(778,0), size=(706, 308))
self.Panel_err_image = wx.Panel(self,wx.ID_ANY, pos=(778,309), size=(706,300))
self.explBox_err_sac = wx.StaticBox(self.Panel_err_sac, wx.ID_ANY, "[ Instruction ]", pos = (8,10), size=(756, 200))
self.lbname1 = wx.StaticText(self.explBox_err_sac, label="1.input name.",pos=(10,20))
self.sa_ra_code_box = wx.StaticBox(self.Panel_err_sac, wx.ID_ANY, "[ input model ]", pos=(8,230), size=(340,80))
self.sa_err_code_CeNa = wx.TextCtrl(self.sa_ra_code_box, wx.ID_ANY, pos=(8,30), size=(260,22))
self.button = wx.Button(self.sa_ra_code_box, wx.ID_OK, label="search", size=(50,23), pos = (280,30))
self.button.SetDefault()
self.sa_er_Box = wx.StaticBox(self.Panel_err_sac, wx.ID_ANY, "[ Search by input name ]", pos = (8,320), size = (340,280))
self.sa_er_inputkw = wx.StaticText(self.sa_er_Box, label="",pos=(8,15), size=(10,40), style=wx.ALIGN_LEFT)
self.sa_er_middle = wx.StaticText(self.sa_er_Box, label=" by", pos=(50,15))
self.sa_er_middle = wx.StaticText(self.sa_er_Box, label="", pos=(8,30))
self.sa_er_footer = wx.StaticText(self.sa_er_Box, label=" searched",pos=(50,30))
self.sa_er_svlist = wx.ListCtrl(self.sa_er_Box, -1, pos = (8,60), size = (330,200), style = wx.LC_REPORT | wx.SUNKEN_BORDER)
self.sa_er_svlist.InsertColumn(0,"model")
self.sa_er_svlist.InsertColumn(1,"spec")
self.sa_er_svlist.SetColumnWidth(0,100)
self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.sa_err_catelist_OnClick, self.sa_er_svlist)
self.button.Bind(wx.EVT_BUTTON, self.sa_err_search_OnButton)
self.sa_er_result_Box = wx.StaticBox(self.Panel_err_sac, wx.ID_ANY, "[ check list ]", pos=(360,230), size =(405,370))
self.sa_er_question_ti = wx.StaticText(self.sa_er_result_Box, label="", pos=(50,20), size = (130,-1))
self.sa_er_question_text = wx.StaticText(self.sa_er_result_Box, label="point", pos = (10,50), size = (130,-1))
self.sa_er_question_te = wx.StaticText(self.sa_er_result_Box, label="", pos=(50,50), size = (130,-1))
self.P_err_sac_case1 = wx.StaticBox(self.Panel_err_sac_result, wx.ID_ANY, "[ check list below ]", pos = (8,10), size=(690,60))
self.P_err_sac_case2 = wx.StaticBox(self.Panel_err_sac_result, wx.ID_ANY, "[ symptom ]", pos=(8,90), size =(690,200))
self.cas2_symp = wx.StaticText(self.P_err_sac_case2, label="selected symptom is..", pos=(10,20))
self.cas2_symp_text = wx.StaticText(self.P_err_sac_case2, label="", pos=(10,40))
self.cas2_descrip = wx.StaticText(self.P_err_sac_case2, label="cause....", pos=(10,70))
self.cas2_descrip_text = wx.StaticText(self.P_err_sac_case2, label="", pos=(10,90))
# -- Combo box
items=[] # Dummy list
self.cb = wx.ComboBox(self.P_err_sac_case1, pos=(10,30),size=(500,20), choices=items, style=wx.CB_READONLY)
self.Bind(wx.EVT_COMBOBOX, self.OnSelectComboBox)
# -- search query
def sa_err_search_OnButton(self, e):
self.sa_er_inputkw.SetLabel(self.sa_err_code_CeNa.GetValue())
searchResult = "%"+self.sa_err_code_CeNa.GetValue()+"%"
self.sa_er_svlist.DeleteAllItems()
sa_err_code_CeNa = cur.execute("Select * from sa_er_cate where cate like '"+searchResult+"'")
count = 0
for i in sa_err_code_CeNa:
self.sa_er_svlist.Append(i[1:3])
count = count +1
self.sa_er_middle.SetLabel(str(count))
self.Bind(wx.EVT_CLOSE, self.on_close)
def on_close(self,e):
self.Destroy()
def sa_err_catelist_OnClick(self, event):
sa_idx = event.GetIndex()
sa_err_check = self.sa_er_svlist.GetItem(sa_idx, 0).GetText()
sa_err_check_Comment = cur.execute("select cate,chek_comment from sa_er_cate where cate ='%s'" %sa_err_check)
for row in sa_err_check_Comment:
self.sa_er_question_ti.SetLabel(row[0])
self.sa_er_question_te.SetLabel(row[1])
model_name_string = row[0]
result_query_1 = cur.execute("Select symp from sac_er_ramp where cate='%s'" % model_name_string)
list=[]
for row_test in result_query_1:
list.append(row_test[0])
self.cb.SetItems(list)
def OnSelectComboBox(self,event):
item = event.GetString()
result_query_2 = cur.execute("Select symp, descrip, judgement,image from sac_er_ramp where symp='%s'" % item)
for row in result_query_2:
self.cas2_symp_text.SetLabel(row[0])
self.cas2_descrip_text.SetLabel(row[1])
imageno = row[3]
# -- IMAGE
erim = Image.open('./image/image_error_ramp/%s.webp' % imageno)
erim.info.pop('background',None)
erim.save('./image/image_error_ramp/%s.gif' % imageno,save_all=True, loop=0)
anim = Animation('./image/image_error_ramp/%s.gif' % imageno)
ctrl = AnimationCtrl(self.Panel_err_image, -1,anim, pos=(35,40))
ctrl.Play()
os.remove('./image/image_error_ramp/%s.gif' % imageno)
if __name__=="__main__":
app = MyApp(False)
app.MainLoop()
此代码的进度如下
以下是我的问题
当我选择组合框列表并且在面板上播放Animated GIF时。 并选择组合框的另一个元素,动画GIF播放另一个元素,并且图像重叠
以下代码...图像转换和播放代码...我将此代码称为“ IMAGE” (我将所有Animated GIF保存到了webp并在那时转换为gif)
erim = Image.open('./image/image_error_ramp/%s.webp' % imageno)
erim.info.pop('background',None)
erim.save('./image/image_error_ramp/%s.gif' % imageno,save_all=True, loop=0)
anim = Animation('./image/image_error_ramp/%s.gif' % imageno)
ctrl = AnimationCtrl(self.Panel_err_image, -1,anim, pos=(35,40))
ctrl.Play()
os.remove('./image/image_error_ramp/%s.gif' % imageno)
所以我认为也许可以解决将“ IMAGE”代码移到构造函数代码下方的问题(因为存在 init 构造函数。)
# constructor
def __init__(self, parent, id=wx.ID_ANY, title="Search", pos=wx.DefaultPosition, size=(1500,650), style=wx.DEFAULT_FRAME_STYLE, name=""):
IMAGE CODE
,在这里(在构造函数代码下面),我无法获取imageno(imageno是图像的名称。该名称来自sqlite,因此我从组合框中选择了一个元素,但无法从中获得任何响应组合框)
我的问题是这个
我可以使用combobox从构造函数代码下面的sqlite获取图像名称吗?
或其他原始位置(在注释“ IMAGE”下方)“动画GIF不重叠”的任何代码?
ps。罗宾·邓恩(Robin Dunnn)和萨克森州(Rox of Saxony)这周教了我这个问题 但是我不明白,也很沮丧.....
玩得开心
答案 0 :(得分:0)
很难知道从哪里开始这个答案,因为存在编码错误,逻辑错误,而且我不知道数据是什么样子。
但是,有几件事很突出。
fetch
才能返回行/行print()
是您的朋友,如果不使用IDE if
语句中设置它们的情况下也就是说,我赞扬您的go for it
态度,但是您可以以较小的步骤做到这一点。掌握所有步骤,然后再尝试将所有步骤放在一起。
这是您的代码的一个版本,带有许多警告。
我不知道您的数据或数据结构。
我首先在数据库中创建了一些虚拟记录。
我不知道你的目标或逻辑。
只有我需要解决的问题才能获得基本运行的程序,并且我删除了一些有关图像处理的代码,以帮助我而不是您。
希望您可以在下面的代码中找到一些好处。
建议您在代码上使用“ diff”,而不要使用代码,以查看发生了什么变化。
import wx
import sqlite3
from PIL import Image # for image processing
from wx.adv import Animation, AnimationCtrl # for gif Animation
conn = sqlite3.connect('reference_file.rre', isolation_level=None)
conn.row_factory = sqlite3.Row
cur = conn.cursor()
result = cur.execute("create table if not exists sa_er_cate (cate TEXT PRIMARY KEY NOT NULL,chek_comment TEXT)");
result = cur.execute("create table if not exists sa_er_ramp (cate TEXT PRIMARY KEY NOT NULL, symp TEXT, descrip TEXT, judgement TEXT,image TEXT)");
# Define a default data
cur.execute("select * from sa_er_cate where (cate=?)",["no1"]);
MyCate = cur.fetchone()
if not MyCate:
try:
conn.execute("insert into sa_er_cate (cate, chek_comment) values (?,?)"\
,("no1","comment 1"));
except sqlite3.Error as e:
print('Default Cate Insert Error '+str(e), 'Error')
try:
conn.execute("insert into sa_er_cate (cate, chek_comment) values (?,?)"\
,("no2","comment 2"));
except sqlite3.Error as e:
print('Default Cate Insert Error '+str(e), 'Error')
cur.execute("select * from sa_er_ramp where (cate=?)",["no1"]);
MySymp = cur.fetchone()
if not MySymp:
try:
conn.execute("insert into sa_er_ramp (cate, symp, descrip, judgement, image) values (?,?,?,?,?)"\
,("no1","no1","description 1","judgement 1","Image1"));
except sqlite3.Error as e:
print('Default Symp Insert Error '+str(e), 'Error')
try:
conn.execute("insert into sa_er_ramp (cate,symp, descrip, judgement, image) values (?,?,?,?,?)"\
,("no2","no2","description 2","judgement 2","Image2"));
except sqlite3.Error as e:
print('Default Symp Insert Error '+str(e), 'Error')
class MyApp(wx.App):
def OnInit(self):
self.frame = errorCode_SAC(None, title ="Guide")
self.SetTopWindow(self.frame)
self.frame.Show()
return True
class errorCode_SAC(wx.Frame):
# constructor
def __init__(self, parent, id=wx.ID_ANY, title="Search", pos=wx.DefaultPosition, size=(1500,650), style=wx.DEFAULT_FRAME_STYLE, name=""):
super(errorCode_SAC, self).__init__(parent, id, title, pos, size, style, name="")
self.Panel_err_sac = wx.Panel(self,wx.ID_ANY, pos=(0,0), size=(774, 608))
self.Panel_dd = wx.Panel(self, wx.ID_ANY, pos=(777,0), size=(1,608))
self.Panel_err_sac_result = wx.Panel(self,wx.ID_ANY, pos=(778,0), size=(706, 308))
self.Panel_err_image = wx.Panel(self,wx.ID_ANY, pos=(778,309), size=(706,300))
self.explBox_err_sac = wx.StaticBox(self.Panel_err_sac, wx.ID_ANY, "[ Instruction ]", pos = (8,10), size=(756, 200))
self.lbname1 = wx.StaticText(self.explBox_err_sac, label="1.input name.",pos=(10,20))
self.sa_ra_code_box = wx.StaticBox(self.Panel_err_sac, wx.ID_ANY, "[ input model ]", pos=(8,230), size=(340,80))
self.sa_err_code_CeNa = wx.TextCtrl(self.sa_ra_code_box, wx.ID_ANY, pos=(8,30), size=(260,22))
self.button = wx.Button(self.sa_ra_code_box, wx.ID_OK, label="search", size=(50,23), pos = (280,30))
self.button.SetDefault()
self.sa_er_Box = wx.StaticBox(self.Panel_err_sac, wx.ID_ANY, "[ Search by input name ]", pos = (8,320), size = (340,280))
self.sa_er_inputkw = wx.StaticText(self.sa_er_Box, label="",pos=(8,15), size=(10,40), style=wx.ALIGN_LEFT)
self.sa_er_middle = wx.StaticText(self.sa_er_Box, label=" by", pos=(50,15))
self.sa_er_middle = wx.StaticText(self.sa_er_Box, label="", pos=(8,30))
self.sa_er_footer = wx.StaticText(self.sa_er_Box, label=" searched",pos=(50,30))
self.sa_er_svlist = wx.ListCtrl(self.sa_er_Box, -1, pos = (8,60), size = (330,200), style = wx.LC_REPORT | wx.SUNKEN_BORDER)
self.sa_er_svlist.InsertColumn(0,"model")
self.sa_er_svlist.InsertColumn(1,"spec")
self.sa_er_svlist.SetColumnWidth(0,100)
self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.sa_err_catelist_OnClick, self.sa_er_svlist)
self.button.Bind(wx.EVT_BUTTON, self.sa_err_search_OnButton)
self.sa_er_result_Box = wx.StaticBox(self.Panel_err_sac, wx.ID_ANY, "[ check list ]", pos=(360,230), size =(405,370))
self.sa_er_question_ti = wx.StaticText(self.sa_er_result_Box, label="", pos=(50,20), size = (130,-1))
self.sa_er_question_text = wx.StaticText(self.sa_er_result_Box, label="point", pos = (10,50), size = (130,-1))
self.sa_er_question_te = wx.StaticText(self.sa_er_result_Box, label="", pos=(50,50), size = (130,-1))
self.P_err_sac_case1 = wx.StaticBox(self.Panel_err_sac_result, wx.ID_ANY, "[ check list below ]", pos = (8,10), size=(690,80))
self.P_err_sac_case2 = wx.StaticBox(self.Panel_err_sac_result, wx.ID_ANY, "[ symptom ]", pos=(8,110), size =(690,200))
self.cas2_symp = wx.StaticText(self.P_err_sac_case2, label="selected symptom is..", pos=(10,20))
self.cas2_symp_text = wx.StaticText(self.P_err_sac_case2, label="", pos=(10,40))
self.cas2_descrip = wx.StaticText(self.P_err_sac_case2, label="cause....", pos=(10,70))
self.cas2_descrip_text = wx.StaticText(self.P_err_sac_case2, label="", pos=(10,90))
# -- Combo box
items=[] # Dummy list
self.cb = wx.ComboBox(self.P_err_sac_case1, pos=(10,30),size=(500,30), choices=items, style=wx.CB_READONLY)
self.Bind(wx.EVT_COMBOBOX, self.OnSelectComboBox)
self.Bind(wx.EVT_CLOSE, self.on_close)
# -- search query
def sa_err_search_OnButton(self, e):
self.sa_er_inputkw.SetLabel(self.sa_err_code_CeNa.GetValue())
searchResult = "%"+self.sa_err_code_CeNa.GetValue()+"%"
self.sa_er_svlist.DeleteAllItems()
sa_err_code_CeNa = cur.execute("Select * from sa_er_cate where cate like '"+searchResult+"'")
rows = cur.fetchall()
count = 0
for i in rows:
self.sa_er_svlist.Append(i[0:3])
count += 1
self.sa_er_middle.SetLabel(str(count))
def on_close(self,e):
self.Destroy()
def sa_err_catelist_OnClick(self, event):
sa_idx = event.GetIndex()
sa_err_check = self.sa_er_svlist.GetItem(sa_idx, 0).GetText()
print("1",sa_err_check)
sa_err_check_Comment = cur.execute("select cate,chek_comment from sa_er_cate where cate ='%s'" %sa_err_check)
row = cur.fetchone()
print("2",row)
if row:
self.sa_er_question_ti.SetLabel(row[0])
self.sa_er_question_te.SetLabel(row[1])
print (row)
model_name_string = row[0]
result_query_1 = cur.execute("Select symp from sa_er_ramp where cate='%s'" % model_name_string)
rows = cur.fetchall()
res_list=["Select an option"]
for row_test in rows:
res_list.append(row_test[0])
self.cb.SetItems(res_list)
self.cb.SetSelection(0)
print(res_list)
self.Refresh()
def OnSelectComboBox(self,event):
item = event.GetString()
result_query_2 = cur.execute("Select symp, descrip, judgement,image from sa_er_ramp where symp='%s'" % item)
rows = cur.fetchall()
imageno = ""
for row in rows:
self.cas2_symp_text.SetLabel(row[0])
self.cas2_descrip_text.SetLabel(row[1])
imageno = row[3]
# -- IMAGE
print("Image selected:",imageno)
#erim = Image.open('./image/image_error_ramp/%s.webp' % imageno)
#erim.info.pop('background',None)
#erim.save('./image/image_error_ramp/%s.gif' % imageno,save_all=True, loop=0)
anim = Animation('./%s.gif' % imageno)
ctrl = AnimationCtrl(self.Panel_err_image, -1,anim, pos=(35,40))
ctrl.Play()
#os.remove('./image/image_error_ramp/%s.gif' % imageno)
if __name__=="__main__":
app = MyApp(False)
app.MainLoop()