PyGTK 3:Python + GTK +3を使用したミニGUIチュートリアル

PyGTK3.0でも機能するPyGTK3.4を使用して小さなプログラムを作成します。 この小さなGUIは、プログラムをXNUMXつ以上のファイルに分割する方法を説明します。

新しいPyGTK3に関するSebastianPölsterlのチュートリアルにアクセスできます。これが新しいチュートリアルです。リンクを残します。

http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html

これはセバスチャンのブログです。

http://k-d-w.org/node/88

セバスチャンによるこのチュートリアルの批判の3つは、プログラムを部分または複数のファイルに分割する方法を教えていないということです。彼がPyGTKXNUMXでそれを行う方法の例を示していれば良かったでしょう。

大規模で複雑なプログラムはすべて多くのファイルに分割され、ファイルは他のディレクトリにも配置されます。つまり、異なるフォルダに配置されます。

小さな例から始めましょう:

これは、gui.pyという単一のファイルにコードを記述したものです。 Geditテキストエディターまたは最もよく使用するエディターを開き、以下のコードをコピーしてgui.pyとして保存します。

from gi.repository import Gtk class gui():def on_open_clicked(self、button):print "\" Open \ "button was clicked" def on_close_clicked(self、button):print "Closing application" Gtk.main_quit()def __init__ (self):self.window = Gtk.Window()self.window.connect( 'delete-event'、Gtk.main_quit)self.box = Gtk.Box()self.window.add(self.box)self。 button = Gtk.Button(label = 'Open')self.button.connect( "clicked"、self.on_open_clicked)self.box.pack_start(self.button、True、True、0)self.button = Gtk.Button( label = '閉じる')self.button.connect( "clicked"、self.on_close_clicked)self.box.pack_start(self.button、True、True、0)self.window.show_all()Gtk.main()if __name__ == '__ main __':gui = gui()

ペディメント

def on_open_clicked(self、button):print "\" Open \ "ボタンがクリックされました"

開くボタンをクリックすると端末で起動する機能です。 それをアクティブにするための信号は次のとおりです。

self.button.connect( "clicked"、self.on_open_clicked)def on_close_clicked(self、button):print "Closing application" Gtk.main_quit()

これは、閉じるボタンをクリックするとアクティブになる機能です。

実行するプログラムを閉じます。

それを活性化するための信号は

self.button.connect( "clicked"、self.on_close_clicked)from gi.repository import Gtk ### PyGTKライブラリを呼び出します### class gui():### guiというクラス定義がメインクラスです# ##

ウィジェットの宣言:ウィジェットは、私たちが使用するGUIライブラリによって事前に決定されたプログラムです。 たとえば、ウィジェットはボタン、ウィンドウ、ボックスなどです。 これらは、プログラムで宣言するウィジェットです。

self.window = Gtk.Window()### window ### self.box = Gtk.Box()### box #### self.button = Gtk.Button(label = 'Open')### #ボタンを開く#### self.button = Gtk.Button(label = '閉じる')####ボタンを閉じる#### self.window.add(self.box)####ボックスはに含まれていますwindowと呼ばれるウィンドウ#### self.box.pack_start(self.button、True、True、0)#####ボタンはboxと呼ばれるボックスに含まれています### self.window.show_all()## #ウィンドウ全体を表示します### gui = gui()### guiオブジェクトを作成します####

この場合、デスクトップ上のsimpleというフォルダーにプログラムを配置します。

FERT

ターミナルでフォルダを開きます。私の場合は、Linux Mint14のNemoを使用しています。

閉じました

コンパイルするには、ターミナルpythongui.pyを配置します

写真を参照してください。

ターミナル

これで、PyGTK3ライブラリで作成された小さなプログラムまたは新しいウィジェットを確認できます。

XNUMXつのボタンがあるシンプルなウィンドウです。

 

無題

 

ここで、プログラムをXNUMXつの部分に分割し、XNUMXつのファイルのコードを残します。

最初のgui.pyファイル

from gi.repository import Gtk from destroy import destroy from io import io class gui(destroy、io):def __init __(self):self.window = Gtk.Window()self.window.connect( 'delete-event'、Gtk .main_quit)self.box = Gtk.Box()self.window.add(self.box)self.button = Gtk.Button(label = 'Open')self.button.connect( "clicked"、self.on_open_clicked) self.box.pack_start(self.button、True、True、0)self.button = Gtk.Button(label = 'Close')self.button.connect( "clicked"、self.on_close_clicked)self.box.pack_start( self.button、True、True、0)self.window.show_all()Gtk.main()if __name__ == '__ main __':gui = gui()

XNUMX番目のio.pyファイル

class io:def on_open_clicked(self、button):print "\" Open \ "ボタンがクリックされました"

XNUMX番目のファイルdestroy.py

gi.repositoryからインポートGtkクラスdestroy:def on_close_clicked(self、button):print "Closing application" Gtk.main_quit()

この場合、XNUMXつのファイルを同じフォルダーに配置します。このフォルダーは単純分割と呼ばれます。

シンプルな

XNUMXつのファイルをコンパイルします。 ターミナルでフォルダを開き、ターミナルに戻すだけです

python gui.py

gui.pyコードに加えられた変更

from destroy import destroy ###ステートメントでファイルをインポートdestroy.py ### from io import io ###ステートメントでファイルをインポートio.py ### class gui(destroy、io):####クラスにmainサブクラスdestroyとio ####を追加します

あなたはその文を見ることができます

def on_open_clicked(self、button):print "\" Open \ "ボタンがクリックされました"

gui.pyにはなく、io.pyファイルにあります

def on_close_clicked(self、button):

「クロージングアプリケーション」を印刷
Gtk.main_quit()

destroy.pyファイルにあります

したがって、プログラムを同時に異なるディレクトリにある多くのファイルに分割することができます。

一方、Pythonはフリーソフトウェアの柱であり、GTK 3.6 /3.8で動作するように適合されており、その名前はPyGTKです。 PythonのKDEへの適応はPyQTと呼ばれます。

PythonはMacOSとWINDOWSに適合しています。

このPyGTK3ミニチュートリアルがお役に立てば幸いです。 彼らは彼らが望むすべての建設的な批判をすることができます。

Gtk 3.4 /3.6とValaGTK 3.4 /3.6も知っています。

http://www.youtube.com/watch?v=9ckRn_sx8CE

最後に、KDEユーザーは、KDEのミニチュートリアルを行わなかったことをお詫びします。


記事の内容は、次の原則に準拠しています。 編集倫理。 エラーを報告するには、 ここで.

33コメント、あなたのコメントを残してください

コメントを残す

あなたのメールアドレスが公開されることはありません。

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   Rots87

    kdeでは、kdevelop(それが呼ばれているものだと思います)を使用して簡単にguiを作成することを好みますが、それが発生するプロセスを見つけるのにまだ苦労していますx事: '(

  2.   St0rmt4il

    Pythonを使用している私たちに最適です:D!

    ご挨拶!

  3.   パブロ

    こんにちは、私は長い間このコミュニティをフォローしてきましたが、これが初めてコメントしたのか、それとも以前にコメントしたことがあるのか​​はよくわかりません😀(実際にウェブにコメントを書くことはあまりありません)。 管理者としてElavとKZKG ^ Gaaraに提案を残すためにそれを行っています。最近、さまざまなプログラミング言語のコードを含む投稿が増えているので、構文の色付け用のプラグインを追加することをお勧めします。 プラグインがたくさんあることは知っていますが、私はワードプレスのユーザーではないので試していません。そのため、リクエストの実行可能性について考えてみてください。 この機会に、他の読者にアイデアについてどう思うか尋ねます。装​​飾なしでコードを読むことを好む人がいることを私は知っているからです。 これがすでにここでコメントされていて、この件に関する議論を見たのを覚えていないので、何らかの理由で拒否された場合は、お詫び申し上げます。

    1.    マリアノガウディクス

      真実は、プログラミング言語のコードを強調するために構文に色を付けるオプションが欲しいということです。
      それはプログラミング言語を学びたいユーザーを助けるでしょう。

      でもねえ、私もフォーラムに満足していて、一緒に話し合って学ぶことができます。

      1.    eliotime3000

        GNU Emacsの方が快適です。少なくとも、使用するプログラミング言語チェッカーを選択する必要があるためです(プロセッサーの重量を増やしたくない場合は、GNU Nanoを使用して、ミニマリズムを最大限に活用してください)。

        1.    マリアノガウディクス

          エリオ私たちはワープレスについて話している。 Linuxからのブログに実装されています。 投稿の文字に色を付ける機能はありません。

          1.    eliotime3000

            あっ、すみません。

        2.    パンデブ92

          Naaa emacsは、84本の指XD ..、普通の人、textmate、sublimetext、またはメモ帳++ xdを持っている人にとって快適です。

          1.    eliotime3000

            信じられないことは、GNUEmacsとそのキーボードショートカットをうまく処理できるようにするために必要なタイピングを学んでいないことです。 さらに、GUIを使用すると、メニューを簡単に使用できます(Windowsで使用できますが、win32がスクリプトをボイコットしないように、通常モードではなくコマンドプロンプトモードで使用することをお勧めします)。

  4.   カーパー

    とてもクールなチュートリアル。 ちなみに、pythonソースコードはコンパイルされておらず、解釈された言語です。

    1.    ギスカード

      疑似コードにコンパイルできます。 これは機械言語ではなく、インタープリターに何かを表すバイトですが、プロセスはコンパイル済みとも呼ばれます。 この意味で、何かがコンパイルされていると言うことができます。

  5.   hty

    Windowsで利用可能な最新バージョンは2であるため、おそらくpytgk2.24を学ぶ方が良いでしょう。 シリーズ3はその欠如によって目立ちます。 そして悪い言葉は、gnomeが新しいバージョンごとにすべてのapiを壊すと言っています。

    1.    マリアノガウディクス

      私はGTK3.4 / 3.6でモックアップをプログラムしますが、実際には、それらはあなたの忍耐力と頭を壊します。コードを書き直す必要があります。LinuxMintの人々がGTKとGNOMEプロジェクトについて不満を言う理由がわかりました。
      MINTの人には、GTK2.4に同意します。これは起こりませんでした。

  6.   カルロス

    良いチュートリアルとリファレンス。
    詳細は、コードが挿入されているため、Pythonではインデントが必須であり、サンプルコードでは尊重する必要があります。

    ご挨拶!

    1.    マリアノガウディクス

      Pythonの必須IDが何で構成されているか説明できますか?実を言うと、聞いたことがありません。英語のPyGTK 2/3フォーラムにあまり慣れておらず、見落としているかもしれません。

      1.    ギスカード

        Pythonでは、Cのようにキーを使用したり、Pascalのように開始/終了ブロックを使用したりしませんが、コードにインデントを付けることですべてが理解されます。 つまり、ブロックはインデントされることによって認識されます。 それは私が特に気に入っている機能です。 キーなどを書くことは避けます。

        1.    パンデブ92

          私はそれが好きではありません、xd行がうまく表にされている場合に見られるよりも、XNUMXつの小さなキーまたはstd :: endl;を置く方が簡単なようです

          1.    フェリペ

            :pプログラミングの先生はあなたに0を付けます。 さらに悪いことに、彼らはあなたの仕事からあなたを解雇します。 最も重要なのは、コードがすべてを意味するもので読み取り可能であるということです

          2.    パンデブ92

            閉じ中括弧で終わると、XDがはるかに読みやすくなります。

          3.    ギスカード

            真剣に?


            int main(int argc, char *argv[]){program_name = argv[0];while ((argc > 1) && (argv[1][0] == '-')) {switch (argv[1][1]) {case 'v':verbose = 1; break;case 'o':out_file = &argv[1][2];break;case 'l':line_max = atoi(&argv[1][2]);break;default:fprintf(stderr,"Bad option %s\n", argv[1]);usage();}++argv;--argc;} if (argc == 1) {do_file("print.in");} else {while (argc > 1) {do_file(argv[1]);++argv;--argc;}}return (0);}

            分かりますか? くぼみがないと、よく理解できません。 そして、それは簡単なことです。 より複雑なものでは、コンパイラだけがそれを理解します。 とにかく(人間がコードを理解するために)インデントする必要があるので、なぜ冗長でセパレーターを使用する必要があるのでしょうか? インデントで十分で、それだけです。

          4.    パンデブ92

            もちろん、c / c ++でのプログラムの適切な記述の規則を尊重していないため、何も理解されていません。 あなたがしたことは、ある関数を入れ子にする、別の関数の中にある別の関数の中にあるなど、何にでも有効です。理解できれば、xdに会いたいと思います。

          5.    パンデブ92

            ちなみに、XNUMXつの外観で、そのコードは簡単に理解できるxD

          6.    ギスカード

            インデントがないと、コンパイルしてもコードを理解するのは非常に難しいことを示すために、私が意図的に行ったことを行いました。 したがって、2つのルールがあります。インデントして区切り文字で囲みます。 しかし、それは冗長です。 Pythonでは、そのようなコードは単にインタプリタによって受け入れられません。 そして、あなたにはただ一つのルールがあります:インデント。 簡単。
            しかしねえ、みんな自分の好みを持っています。

          7.    アテユス

            インデントされたものとインデントされていないものの両方が良好です。私の意見では、パイソンに似たセミコロンスタイルまたはルビーが好きですが、インデントは必要ありません。

            これはそれがよりよく理解される方法です:P:

            echo'int main(int argc、char * argv []){program_name = argv [0]; while((argc> 1)&&(argv [1] [0] == '-')){switch(argv [ 1] [1]){ケース 'v':冗長= 1; break; case'o ':out_file =&argv [1] [2]; break; case'l':line_max = atoi(&argv [1] [2]); break;デフォルト:fprintf(stderr、»不正なオプション%s \ n»、argv [1]);使用法();} ++ argv; –argc;} if(argc == 1){do_file( "print.in");} else {while(argc> 1 ){do_file(argv [1]); ++ argv; –argc;}} return(0);} '| perl -p -e's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g; '

            ご挨拶😀

      2.    ギスカード

        カルロスは、コードが出てくるところにインデントがないことを意味すると思います。 コピー&ペーストではうまくいきません。 投稿作成時にタグが存在するかどうかわかりません 言語コードを入力します。 それが存在しなければ、彼らがそれを置くとよいでしょう。

        1.    ギスカード

          私はすでに問題が何であるかを見ました:CODEタグはすべてのスペースとタブを削除します(それはそれをするべきではありません!!!)しかしあなたがそれにnbspを置くならば、コードは見栄えがします。 A0は160進数(XNUMX月はXNUMX)ですが、フォントによって異なると思います(わかりません)。 それが使用される場合、それは次のようになります:

          def fib(n):
              a, b = 0, 1
              while a < n:
                  print(a)
                  a, b = b, a+b

          私のテストではそれは良さそうに見えますが、答えを投稿するときにプレビューがありません(そしてそれがあるはずです!!!)それが出てこない場合、それは私のせいではありません

          1.    マリアノガウディクス

            SebastianPölsterlが彼のPyGTK3チュートリアルに置いた例を見てください。Sebastianはラベルを配置していません。

            例:

            http://python-gtk-3-tutorial.readthedocs.org/en/latest/entry.html#example

            セバスチャンのチュートリアルをすべて見ることができます。

          2.    ギスカード

            意味が分からない。 私が言っているのは、ここの投稿では、「CODE」HTMLタグを使用して、コードとして入力したものが適切にインデントされているようにすることはできないということです。 参照するページで、ページソースを表示すると、CODEを使用せず、他のHTML区切り文字を使用していることがわかります。
            それはあなたが入れたコードに反するのではなく、むしろこのサイトの投稿システムの欠陥を指摘しています。 おそらく、管理者が修正できるものです。
            タグについて話すとき、私は明らかにPythonではなくHTMLについて話します。 いずれにせよ、Pythonでインデントなしでコードを配置すると、機能しません。 初心者が来て、この投稿に表示されているコードをコピーして実行しようとすると、失敗します。 あなたは初心者なのでイライラするかもしれません。 繰り返しますが、責任はあなたのものではありません。 直前の回答では、投稿者レベルから問題を解決する方法を提供しました。

          3.    マリアノガウディクス

            あなたは絶対に正しいです、私はコードをコピーする代わりに写真をアップロードするべきでした。
            PyGTK3でステートメントがどのように適切に順序付けられているかを示します。

  7.   フェリペ

    pythonでプログラミングするには、EclipseとPyDevプラグイン、またはPycharmを使用することをお勧めします。

  8.   ルイス

    上でコメントしたように、インデントの問題のために、私がpythonが好きではないのはまさにそのためです。 これまで見てきたように、コピー&ペーストは機能しません。これは、C、Java、PHPなどの他の言語では発生しません。

    読みやすさのこと、私たちはコード美化器を適用します(のような http://indentcode.net/ )そして準備ができて、

    醜いものは修正されましたが、インデントがなく、ロジックが変更された場合、私たちは聞こえます...

  9.   カルロス

    私はPyGTKを初めて使用しますが、この言語でシェルスクリプトを操作することはできますか?

    1.    もしもし

      チュートリアルをありがとう。

      ご挨拶。