最新消息:

用PyGTK实现的一个抽奖小程序

python admin 2691浏览 0评论

为即将到来的TJLUG的第三次线下活动写的一个抽奖小程序,随机生成1,200之间的号码,点击开始按钮开始滚动数字,停止按钮开始停止数字,并选择当前数字为中将号码 python源代码:

#-*- coding: utf-8 -*-
import sys
import os
import random
import time
import threading

try:
    import pygtk
    pygtk.require('2.0')
except:
    pass

try:
    import gtk
except:
    print "GTK Not avaliable!"
    sys.exit(1)

class update(threading.Thread):
    def __init__(self):
        """初始化线程"""
        threading.Thread.__init__(self,name="update")
        self.label=None
        self.num=0
        self.over=False

    def setNum(self,widget,data):
        """设置label的text值"""
        widget.set_text(str(data))
        return True

    def kill(self):
        """设置标志位,来杀死线程"""
        self.over=True

    def run(self):
        while not self.over :
            self.num=random.randint(1,200)
            self.setNum(self.label,self.num)
            time.sleep(0.1000)

class lucky():
    """抽奖的一个小程序"""
    def on_window_destroy(self,widget,data=None):
        gtk.main_quit()

    def __init__(self):
        """读取glade文件,并自动链接信号"""

        #从xml文件中读取数据,并链接必要的信号
        self.builder=gtk.Builder()
        self.file=sys.path[0]+"/lucky.glade"
        self.builder.add_from_file(self.file)
        self.builder.connect_signals(self)
        for widget in  self.builder.get_objects():
            if issubclass(type(widget),gtk.Buildable):
                name=gtk.Buildable.get_name(widget)
                setattr(self,name,widget)

        #显示所有窗体
        self.window.set_size_request(800,500)
        self.window.show()

    def on_startbutton_clicked(self,widget,data=None):
        """开始抽奖"""
        self.u=update()
        self.u.label=self.luckylabel
        self.u.setDaemon(True)
        self.u.start()

    def on_stopbutton_clicked(self,widget,data=None):
        """停止,显示当前号码"""
        self.u.kill()

    #主循环
    def main(self):
            gtk.main()

if __name__=="__main__":
    gtk.gdk.threads_init()
    lc=lucky()
    lc.main()

Glade源文件

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <requires lib="gtk+" version="2.16"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="window">
    <child>
      <object class="GtkTable" id="table">
        <property name="visible">True</property>
        <property name="n_rows">3</property>
        <property name="n_columns">3</property>
        <property name="homogeneous">True</property>
        <child>
          <object class="GtkButton" id="startbutton">
            <property name="label" translatable="yes">start</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="on_startbutton_clicked"/>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="right_attach">2</property>
            <property name="top_attach">2</property>
            <property name="bottom_attach">3</property>
            <property name="x_options">GTK_EXPAND</property>
            <property name="y_options"></property>
          </packing>
        </child>
        <child>
          <object class="GtkButton" id="stopbutton">
            <property name="label" translatable="yes">stop</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="on_stopbutton_clicked"/>
          </object>
          <packing>
            <property name="left_attach">2</property>
            <property name="right_attach">3</property>
            <property name="top_attach">2</property>
            <property name="bottom_attach">3</property>
            <property name="x_options"></property>
            <property name="y_options"></property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="luckylabel">
            <property name="visible">True</property>
            <property name="label" translatable="yes">100</property>
            <property name="justify">center</property>
            <property name="ellipsize">middle</property>
            <attributes>
              <attribute name="weight" value="medium"/>
              <attribute name="size" value="200000"/>
              <attribute name="foreground" value="#e3970be40be4"/>
            </attributes>
          </object>
          <packing>
            <property name="right_attach">3</property>
            <property name="bottom_attach">2</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
      </object>
    </child>
  </object>
  <object class="GtkTextBuffer" id="textbuffer1"/>
</interface>

转载请注明:爱开源 » 用PyGTK实现的一个抽奖小程序

您必须 登录 才能发表评论!