基维:如何在按键上打电话

2024-09-29 23:22:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个生成门票的应用程序。生成脚本已经完成。在

当我按下按钮“genera”(英语为“genera”)时,它应该打印生成的票证(目前在终端中)。在

它都在运行,但是当我按下Generate按钮时,我得到了这个错误:

AttributeError: StockholmTicket instance has no call method

我不知道怎么打电话给gen_btn出版社的StockholmTicket,希望你能帮我。在

代码如下:

from kivy.app import App

from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

from datetime import datetime, timedelta
import random


class Fejkbiljett(App):

    def build(self):
        gen_btn = Button(text='Generera',
                         size_hint=(.90, .10),
                         pos=(5, 5),
                         font_size=21)

        gen_btn.bind(on_press=StockholmTicket())

        l = BoxLayout()

        l.add_widget(gen_btn)

        return l


class StockholmTicket():

    def getMessage():
        # gNumbers
        gNumbers = random.randint(100, 999)
        gNumbers = str(gNumbers)

        gLetters = 'EAOXE'
        gLetters = gLetters * 2
        gLetters = ''.join(random.sample(gLetters, len(gLetters)))
        gLetters2 = 'EAOXA'
        gLetters2 = gLetters2 * 2
        gLetters2 = ''.join(random.sample(gLetters2, len(gLetters2)))
        gLetters3 = 'EAOXA'
        gLetters3 = gLetters3 * 2
        gLetters3 = ''.join(random.sample(gLetters3, len(gLetters3)))

        sCode = '123456789123456'
        sCode = ''.join(random.sample(sCode, len(sCode)))
        sCode = sCode[:6] + ' ' + sCode[6:]

        iPrice = '20'
        sPriceText = 'Red pris'
        sPricetype = 'R'
        mZones = 'A'
        mTime = datetime.now()
        mTime = mTime + timedelta(hours=1, minutes=15)
        mTime = str(mTime)
        mTime = mTime[11:16]
        mDate = str(datetime.now())
        mDate = mDate[:10]

        print((sPricetype + "-" + mZones + " " + mTime + " "
              + gNumbers + "\n\n"

              + gLetters + "\n"
              + gLetters2 + "\n"
              + gLetters3 + "\n"
              + "EEEEEEEEEE\n\n"

              + "SL biljett giltig till " + mTime + ", " + "\n" + mDate + "\n"
              + sPriceText + " " + iPrice + " kr ink 6% moms\n"

              + sCode + "\n"
              + "m.sl.se"))

    getMessage()

if __name__ == "__main__":
    Fejkbiljett().run()

Tags: samplefromimportdatetimerandomgenjoinbtn
3条回答

这里的“StockholmTicket()”是一个不可调用的类(除非您成功调用,但这是另一个讨论)。尝试使用这段代码,它将创建一个实例来保存要调用的函数。在

    gen_btn.bind(on_press=StockholmTicket().getMessage)

而不是

^{pr2}$

您还需要重新定义“getMessage”函数,因为它还不接受参数,但需要重新定义。试试看

class StockholmTicket():
    def getMessage(self, * args):

希望有帮助吗?干杯

不知道为什么(我猜是这样定义类的),但是当调用不属于绑定的同一个类的方法时,它就不起作用了。您可以在类内创建方法,并在另一个类中调用该方法。像这样:

from kivy.app import App

from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout


class Fejkbiljett(App):

    def build(self):
        self.gen_btn = Button(text='Generera',
                         size_hint=(.90, .10),
                         pos=(5, 5),
                         font_size=21)
        self.gen_btn.bind(on_press=self.getMessageFejkbiljett)
        l = BoxLayout()
        l.add_widget(self.gen_btn)
        return l

    def getMessageFejkbiljett(self, *args):
        print "1. this is called on the method getMessageFejkbiljett of Fejkbiljett"
        st = StockholmTicket()
        st.getMessage(self)


class StockholmTicket():

    def getMessage(self, source):
        source.gen_btn.text = "the event was called"
        print "2. this is called on the method getMessage of StockholmTicket"

if __name__ == "__main__":
    Fejkbiljett().run()

但这有效吗?在

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout


class Fejkbiljett(App):

    def build(self):
        gen_btn = Button(text='Generera',
                         size_hint=(.90, .10),
                         pos=(5, 5),
                         font_size=21)
        gen_btn.bind(on_press=StockholmTicket.getMessage)
        l = BoxLayout()
        l.add_widget(gen_btn)
        return l


class StockholmTicket(object):

    def getMessage(self):
        print "2. this is called on the method getMessage of StockholmTicket"

if __name__ == "__main__":
    Fejkbiljett().run()

相关问题 更多 >

    热门问题