Python/Kivy:将函数从一个类调用到另一个类,并用Python显示小部件

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控制台中打印更新的数据,但在

我正在使用Python-2.7和Kivy。当我运行test.py时,会显示一个show按钮。当我单击show按钮时,会显示一个标签和值。我正在从数据库中获取它,但现在我将它定义为一个静态数组

当我点击Item1标签,然后调用def open_form,在调用id为的
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()