#coding:utf-8appuifw インポート から *e32をインポート輸入 OS#設定ファイル、メディアファイルなどが含まれるフォルダーdata_path = os 。 getcwd ( ) [ 0 ] + u ': \\システム\\データ\\ HabraKarma \\ 'クラス Main:def __init__ ( self ) :アプリ。 screen = 'normal'#辞書である設定ファイルを読み取り、#repr経由で愚かに保存:)自己 。 settings = eval ( open ( data_path + 'set.dat' ) 。 read ( ) )#フォームのフィールドのリスト、保存された値をそのフィールドに挿入します。自己 。 フィールド = [( u 'Habrauser' 、 'text' 、 self。settings [ 'user' ] ) 、( u "自動更新(最小)" 、 'number' 、 self。settings [ 'time' ] ) 、( u "サウンドを有効にしますか?" 、 'combo' 、 ( [ u 'Yes' 、u 'No' ] 、 int ( self。settings [ 'sound' ] ) ) )) 、( u "違いを数える" 、 'combo' 、 ( [ u '仕事の始まり' 、u '最後の更新以来' ] 、 int ( self。settings [ 'diff' ] ) ) )) 、( u "Position X" 、 'number' 、 self。settings [ 'X' ] ) 、( u "Position Y" 、 'number' 、 self。settings [ 'Y' ] ) 、]#フラグ付きのフォームを作成自己 。 form = Form ( self。fields、flags = FFormDoubleSpaced | FFormEditModeOnly )#フォームから値を保存する関数を定義する自己 。 フォーム save_hook = self 保存する#サーバーが既に実行されている場合、メニューは「停止」になり、その逆も同様です。osの 場合 。 パス 存在する ( u 'd: \\ habra_flag' ) :自己 。 フォーム menu = [ ( u 'Stop' 、 self。stop ) ]その他 :自己 。 フォーム menu = [ ( u 'Run' 、 self。start_server ) ]#フォームを「実行」します。つまり、画面に表示されるまで#そこから抜け出すことはできません。自己 。 フォーム 実行 ( )#フォームを終了した後、サーバーが実行されているかどうかを確認し、開始を提案しますosで ない 場合 。 パス 存在する ( u 'd: \\ habra_flag' ) :if query ( u 'Run?' 、 'query' ) :自己 。 start_server ( )def start_server ( self ) :#実際にサーバー起動機能自己 。 フォーム menu = [ ( u 'Stop' 、 self。stop ) ]e32。 start_server ( data_path + 'server.py' )def stop ( self ) :#サーバー停止機能。自己 。 フォーム menu = [ ( u 'Run' 、 self。start_server ) ]open ( u 'd: \\ habra_flag' 、 'w' ) 。 書き込み ( 'stop' )def save ( self 、arg = None ) :#フォームから値を取得し、設定ファイルに保存します。自己 。 設定 [ 'ユーザー' ] = arg [ 0 ] [ 2 ]自己 。 設定 [ '時間' ] = arg [ 1 ] [ 2 ]自己 。 設定 [ 'サウンド' ] = arg [ 2 ] [ 2 ] [ 1 ]自己 。 設定 [ 'diff' ] = arg [ 3 ] [ 2 ] [ 1 ]自己 。 設定 [ 'X' ] = arg [ 4 ] [ 2 ]自己 。 設定 [ 'Y' ] = arg [ 5 ] [ 2 ]open ( data_path + 'set.dat' 、 'w' ) 。 書き込み ( repr ( self。settings ) )真を 返すa =メイン( )
#-*-コーディング:utf-8-*-輸入 OSe32をインポートインポートシステム#エラーをファイルにリダイレクトします。sys stderr = open ( 'd: \\ err.txt' 、 'w' )globalui を ui として インポートtopwindowをインポートグラフィックのインポート から *urllibを インポート するオーディオをインポートするopen ( u 'd: \\ habra_flag' 、 'w' ) 。 書き込み ( '' )data_path = os 。 getcwd ( ) [ 0 ] + u ': \\システム\\データ\\ HabraKarma \\ '#開始したことを示しています。ui。 global_note ( u 'Habrastart!' )クラス Habra:def __init__ ( self ) :#画像を開く自己 。 habr_img =画像。 オープン ( data_path + 'habr.png' )自己 。 update_img =イメージ。 オープン ( data_path + 'update.png' )#設定を読む自己 。 settings = eval ( open ( data_path + 'set.dat' ) 。 read ( ) )自己 。 last_karma = eval ( open ( data_path + 'karma.dat' ) 。 read ( ) )#オープンサウンド自己 。 bad_sound =オーディオ。 音 オープン ( data_path + 'bad.wav' )自己 。 good_sound =オーディオ。 音 オープン ( data_path + 'good.wav' )自己 。 ループ = True#TopWindowウィンドウを作成自己 。 top = topwindow。 TopWindow ( )#丸めを示す自己 。 トップ 。 corner_type = 'corner5'自己 。 トップ 。 サイズ = ( 170、35 )#設定ファイルから位置を設定自己 。 トップ 。 position = ( self。settings [ 'X' ] 、 self。settings [ 'Y' ] )自己 。 トップ 。 表示 ( )自己 。 karma_screen ( )自己 。 メインループ ( )def stop ( self ) :自己 。 ループ = False自己 。 トップ 。 非表示 ( )def karma_screen ( self ) :#更新するために呼び出される関数自己 。 update_screen ( )e32。 ao_sleep ( 0.2 )#harba apiで情報を取得data = urllib urlopen ( 'http://habrahabr.ru/api/profile/' + self。settings [ 'user' ] ) 。 読む ( )#たぶんつまずいたが、これを引っ張りたくない#xmlを解析するためのケースライブラリkarma = float ( data。split ( '<karma>' ) [ 1 ] 。split ( '</ karma>' ) [ 0 ] )#新しいカルマと古いカルマを比較し、#状況に応じて、テキストを収集し、色を指定します#設定で設定されている場合、サウンドを再生自己の 場合 。 last_karma <カルマ:karma_diff = u '(+' + str ( abs ( self。last_karma -karma ) ) + u ')'karma_color = 0x009f31自己で なければ 。 設定 [ 'サウンド' ] :自己 。 good_sound プレイ ( )エリフセルフ 。 last_karma >カルマ:karma_diff = u '(-' + str ( abs ( self。last_karma -karma ) ) + u ')'karma_color = 0xc30202自己で なければ 。 設定 [ 'サウンド' ] :自己 。 bad_sound 。 プレイ ( )その他 :karma_diff = u ''karma_color = 0xffffff自己の 場合 。 設定 [ 'diff' ] :自己 。 last_karma =カルマopen ( data_path + 'karma.dat' 、 'w' ) 。 書き込み ( repr ( karma ) )#ここで、幅のピクセル数がテキストを占めることがわかりますkarma_width = self img 。 measure_text ( unicode ( karma ) ) [ 0 ] [ 2 ]diff_width = self img 。 measure_text ( karma_diff ) [ 0 ] [ 2 ]#そして技術の問題:)自己 。 img =イメージ。 新規 ( ( 45 + karma_width + diff_width、 35 ) )自己 。 トップ 。 size = ( self。img。size [ 0 ] 、 35 )自己 。 img 。 テキスト ( ( 35、25 ) 、 ユニコード ( karma ) )自己 。 img 。 テキスト ( ( 35 + karma_width + 5、25 ) 、karma_diff、fill = karma_color )自己 。 img 。 blit ( self。habr_img )自己 。 トップ 。 add_image ( self。img 、 ( 0、0 ) )def update_screen ( self ) :#これは更新中に表示されます自己 。 img =イメージ。 新規 ( ( 165、35 ) )自己 。 トップ 。 size = ( self。img。size [ 0 ] 、 35 )自己 。 img 。 blit ( self。update_img )自己 。 img 。 テキスト ( ( 35、25 ) 、u '更新済み' )自己 。 トップ 。 add_image ( self。img 、 ( 0、0 ) )def mainloop ( self ) :#そしてメインサーバーループを開始interval = self 設定 [ '時間' ] * 60カウント= 0自己 ながら 。 ループ :#注文された場合、サーバーを停止開いている 場合 ( u 'd: \\ habra_flag' ) 。 読み取り ( ) :os 。 削除 ( u 'd: \\ habra_flag' )ui。 global_note ( u 'Habrastop!' )自己 。 ループ = Falseカウント+ = 1#時間が来たら、カルマを公開します。カウント>間隔の場合 :カウント= 0自己 。 karma_screen ( )e32。 ao_sleep ( 1 )habr = Habra ( )
Source: https://habr.com/ru/post/J77452/More articles:私の最初のおもちゃ:Wave Time Meeting MatcherガジェットSamsung i5700-スクリーンショットScalaでの私の始まり、またはJavaの後にScalaを学ぶITプロフェッショナルの仕事が減るソニー、ユニバーサル、YouTubeは3億ドルを投資しましたGoogle Wave 30個に招待Palculator-Windows用の代替計算機タンボフ会議、パート3ミュージシャン-インターネットで!!!App Engine SDK 1.2.8 Plus新しい管理コンソールAll Articles