Python/Kivy:将函数从一个类调用到另一个类,并用Python显示小部件
我正在使用Python-2.7和Kivy。当我运行test.py时,会显示一个show按钮。当我单击show按钮时,会显示一个标签和值。我正在从数据库中获取它,但现在我将它定义为一个静态数组 当我点击Item1标签,然后调用def open_form,在调用id为的Python/Kivy:将函数从一个类调用到另一个类,并用Python显示小部件,python,python-2.7,kivy,kivy-language,Python,Python 2.7,Kivy,Kivy Language,我正在使用Python-2.7和Kivy。当我运行test.py时,会显示一个show按钮。当我单击show按钮时,会显示一个标签和值。我正在从数据库中获取它,但现在我将它定义为一个静态数组 当我点击Item1标签,然后调用def open_form,在调用id为的EditPopup(self)后传递id 11,并显示带有值的弹出窗口 之后,我更改itemCode,单击ok按钮,然后更新数据库中的数据 之后,我调用Invoice().abc(),然后它在Pycharm控制台中打印更新的数据,但在
EditPopup(self)
后传递id 11,并显示带有值的弹出窗口
之后,我更改itemCode
,单击ok按钮,然后更新数据库中的数据
之后,我调用Invoice().abc()
,然后它在Pycharm
控制台中打印更新的数据,但在布局中不显示最新的数据。添加小部件(弹出窗口)
有人能告诉我哪里出错了吗
test.py
试验电压(千伏)
:
字体大小:15
字体名称:“Verdana”
尺寸提示:无
身高:30
:
字体大小:15
字体名称:“Verdana”
尺寸提示:无
身高:30
文本大小:self.size
valign:“中间”
在以下情况之前:
颜色:
rgb:.6、.6、.6
矩形:
pos:self.pos
大小:self.size
:
标题:self.mode+“项目”
大小提示:无,无
标题尺寸:20
标题字体:“Verdana”
尺寸:400275
自动解除:错误
盒子布局:
方向:“垂直”
网格布局:
科尔斯:2
#背景颜色:0,0.517,0.705,1
间距:10,10
填充:20,20
标签:
文本:root.label\u rec\u id
文本大小:self.size
标签:
id:itemId
text:root.col_数据[0]
文本大小:self.size
标签:
文本:“项目名称”
文本大小:self.size
valign:“中间”
文本输入:
id:itemName
text:root.col_数据[1]
文本大小:self.size
标签:
案文:“州法典”
文本大小:self.size
valign:“中间”
文本输入:
id:itemCode
text:root.col_数据[2]
文本大小:self.size
网格布局:
科尔斯:2
填充:10,0,10,10
间距:10,10
行\默认\高度:“20dp”
大小提示:.55,.3
位置提示:{'x':.25,'y':.65}
按钮:
大小\u提示\u x:.5
文本:“Ok”
发布时:
root.update(root)
根目录
按钮:
大小\u提示\u x:.5
文本:“取消”
发布时:root.disclose()
:
盒子布局:
方向:“垂直”
填充:15,15
盒子布局:
方向:“垂直”
填充:5,5
大小提示:.6,无
位置提示:{'x':.18,}
盒子布局:
方向:“水平”
填充:5,5
间距:10,10
尺码:800,40
大小提示:1,无
按钮:
文字:“显示”
尺寸提示:0.05
间距x:30
on_press:root.abc()
盒子布局:
方向:“水平”
大小提示:1,1
盒子布局:
方向:“垂直”
大小提示:.5,1
填充:0,15
间距:10,10
尺寸:500,30
网格布局:
id:发票
科尔斯:2
#方向:“水平”
填充:5,0
间距:10,0
#尺寸:500,30
大小提示:1,1
pos:self.pos
大小:self.size
您正在创建一个新的发票
实例,而不是使用现有实例
Invoice().abc()
请尝试:
class EditPopup(Popup):
mode = StringProperty("")
label_rec_id = StringProperty("Id")
col_data = ListProperty(["?", "?", "?"])
index = NumericProperty(0)
def __init__(self, obj, **kwargs):
super(EditPopup, self).__init__(**kwargs)
self.obj = obj # will need it later...
def update(self,obj):
#cur.execute("UPDATE `item` SET itemName=?, itemCode=? WHERE itemId=?",
#('Item1', 9999, 11))
#con.commit()
self.obj.abc() # was Invoice().abc()
问题
通过在类EditPopup的方法update中调用Invoice().abc()来实例化类Invoice的第二个实例
解决方案
1) test.py
在类EditPopup中的方法update处注释Invoice().abc(),并添加pass
2) 试验电压(千伏)
在调用方法更新后,在类EditPopup中添加对方法abc的调用
Button:
size_hint_x: .5
text: "Ok"
on_release:
root.update(root)
app.root.abc()
root.dismiss()
输出
您能否修改示例代码以实际创建和使用test.db
?在没有显示问题的代码中调试问题非常困难。
class EditPopup(Popup):
mode = StringProperty("")
label_rec_id = StringProperty("Id")
col_data = ListProperty(["?", "?", "?"])
index = NumericProperty(0)
def __init__(self, obj, **kwargs):
super(EditPopup, self).__init__(**kwargs)
self.obj = obj # will need it later...
def update(self,obj):
#cur.execute("UPDATE `item` SET itemName=?, itemCode=? WHERE itemId=?",
#('Item1', 9999, 11))
#con.commit()
self.obj.abc() # was Invoice().abc()
def update(self, obj):
#cur.execute("UPDATE `item` SET itemName=?, itemCode=? WHERE itemId=?",
#('Item1', 9999, 11))
#con.commit()
# Invoice().abc()
pass
Button:
size_hint_x: .5
text: "Ok"
on_release:
root.update(root)
app.root.abc()
root.dismiss()