Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

PyGTK初体验



  • GUI(图形用户接口)在程序开发中起举足轻重的作用。从某种角度来说MVC也是一个GUI类库,再加上GTK和QT可以并称三大GUI类库。期中前者主要用于windows平台,后两者用在Linux平台较多。GTK是Gnome的底层类库,而QT是KDE的底层类库。相对而言QT比GTK名气更大,但是GTK比QT更加开放。因此本人Python下第一次用户界面程序开发就使用GTK下的PyGTK。


    PyGTK顾名思义是Python下对GTK的封装。GTK下也有窗体Form和控件的概念。只是控件被称之为widget。窗体和widget都是GObejct是子类。Gobject是GTK的一个基类,在GObject中可以自定义事件和属性。(内容相对复杂就不展开了)

    对应于简单的GTK窗口开发的步骤大概可以分为三步。
    1widget设计布局。并加载widget。
    2事件方法关联。并实现方法。
    3显示窗口,注意GTK主循环.

    首先是widget的布局。GTK除了动态控制控件位置之外,还支持一种Glade布局。本质上是把控件的位置及其其他属性信息写在XML文件中。(这里称为glade,同时glade也是一个可视化配置软件。用来设计时给widget布局,但是不好用。)然后在类初始化的时候,把glade文件加载,并找到(通过Id名称)我们需要的widget。然后再把window显示出来,就实现窗口布局。

    第二个关键问题是事件方法的关联。在VB和delphi中我们只要双击GUI设计界面中的按钮,一般就会自动实现关联。GTK中做的更加底层,也就更加复杂。首先引入singal信号,通过信号把事件和处理联系起来。抽取Glade文件内容为代码1

    代码1
    [code]

              <widget class="GtkButton" id="btnWrite">

                <property name="width_request">60</property>

                <property name="height_request">30</property>

                <property name="visible">True</property>

                <property name="can_focus">True</property>

                <property name="receives_default">True</property>

                <property name="response_id">0</property>

                <signal name="clicked" handler="OnWrite"/>

              </widget>
    [/code]
    <signal name="clicked" handler="OnWrite"/>就是所谓的信号,但是注意 handler 中的OnWrite还不是最终的方法。

    还需要第二步在py文件中__init(self)__方法中使用 res.signal_autoconnect(signal)其中signal是一个字典表示handler和方法的对应关系如:signal = {'OnRead':self.OnRead,'OnWrite':self.OnWrite}

    第三主循环的引入,对于窗口程序而言,需要引入主循环,用来等待事件的触发。在gtk中为

    gtk.main()

    了解了以上三部分内容基本上就可以进行GTK基本的页面开发了,见代码2:。

    代码2:
    [code]
    class CardIOForm():

        def init(self):

            res = gtk.glade.XML('cardio.glade')

            self.win1=res.get_widget('cardioform')

            self.entryCode=res.get_widget('entryCode')

            signal = {'OnRead':self.OnRead,'OnWrite':self.OnWrite,'OnClose':self.OnClose,'OnWritePwd':self.OnWritePwd,}

            res.signal_autoconnect(signal)

           

        def OnRead(self,widget):

            "读第2扇区"

          pass

         

       

        def OnWrite(self,widget):

            "写入编码"

            pass

           

        def OnWritePwd(self,widget):

            "先写入密码"       

          pass

       

        def show(self):

            self.win1.show()

           

        def OnClose(self,widget):

            gtk.main_quit()



    if name == 'main':

        window = CardIOForm()

     window.show()

        gtk.main()
    [/code]


    参考文献:

    PyGTK 2.0 Reference Manual http://developer.gnome.org/pygtk/stable/
    PyGTK 2.0 Tutorial(可下载pdf)



  • GUI(图形用户接口)在程序开发中起举足轻重的作用。从某种角度来说MVC也是一个GUI类库,再加上GTK和QT可以并称三大GUI类库。期中前者主要用于windows平台,后两者用在Linux平台较多。GTK是Gnome的底层类库,而QT是KDE的底层类库。相对而言QT比GTK名气更大,但是GTK比QT更加开放。因此本人Python下第一次用户界面程序开发就使用GTK下的PyGTK。


    PyGTK顾名思义是Python下对GTK的封装。GTK下也有窗体Form和控件的概念。只是控件被称之为widget。窗体和widget都是GObejct是子类。Gobject是GTK的一个基类,在GObject中可以自定义事件和属性。(内容相对复杂就不展开了)

    对应于简单的GTK窗口开发的步骤大概可以分为三步。
    1widget设计布局。并加载widget。
    2事件方法关联。并实现方法。
    3显示窗口,注意GTK主循环.

    首先是widget的布局。GTK除了动态控制控件位置之外,还支持一种Glade布局。本质上是把控件的位置及其其他属性信息写在XML文件中。(这里称为glade,同时glade也是一个可视化配置软件。用来设计时给widget布局,但是不好用。)然后在类初始化的时候,把glade文件加载,并找到(通过Id名称)我们需要的widget。然后再把window显示出来,就实现窗口布局。

    第二个关键问题是事件方法的关联。在VB和delphi中我们只要双击GUI设计界面中的按钮,一般就会自动实现关联。GTK中做的更加底层,也就更加复杂。首先引入singal信号,通过信号把事件和处理联系起来。抽取Glade文件内容为代码1

    代码1
    [code]

              <widget class="GtkButton" id="btnWrite">

                <property name="width_request">60</property>

                <property name="height_request">30</property>

                <property name="visible">True</property>

                <property name="can_focus">True</property>

                <property name="receives_default">True</property>

                <property name="response_id">0</property>

                <signal name="clicked" handler="OnWrite"/>

              </widget>
    [/code]
    <signal name="clicked" handler="OnWrite"/>就是所谓的信号,但是注意 handler 中的OnWrite还不是最终的方法。

    还需要第二步在py文件中__init(self)__方法中使用 res.signal_autoconnect(signal)其中signal是一个字典表示handler和方法的对应关系如:signal = {'OnRead':self.OnRead,'OnWrite':self.OnWrite}

    第三主循环的引入,对于窗口程序而言,需要引入主循环,用来等待事件的触发。在gtk中为

    gtk.main()

    了解了以上三部分内容基本上就可以进行GTK基本的页面开发了,见代码2:。

    代码2:
    [code]
    class CardIOForm():

        def init(self):

            res = gtk.glade.XML('cardio.glade')

            self.win1=res.get_widget('cardioform')

            self.entryCode=res.get_widget('entryCode')

            signal = {'OnRead':self.OnRead,'OnWrite':self.OnWrite,'OnClose':self.OnClose,'OnWritePwd':self.OnWritePwd,}

            res.signal_autoconnect(signal)

           

        def OnRead(self,widget):

            "读第2扇区"

          pass

         

       

        def OnWrite(self,widget):

            "写入编码"

            pass

           

        def OnWritePwd(self,widget):

            "先写入密码"       

          pass

       

        def show(self):

            self.win1.show()

           

        def OnClose(self,widget):

            gtk.main_quit()



    if name == 'main':

        window = CardIOForm()

     window.show()

        gtk.main()
    [/code]


    参考文献:

    PyGTK 2.0 Reference Manual http://developer.gnome.org/pygtk/stable/
    PyGTK 2.0 Tutorial(可下载pdf)



  • 老梅牛!
    本文提供了一个OpenERP和外部设备接口的范例!



  • 对应Mifire One(就是最标准的射频IC卡)的读写部分,我删去了。因为这部分是个性的,没有普遍意义,如果有特殊需要的话,我可以提供完整的代码,进行交流。



  • 这个必须的....顶....


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待