PyGTK 3: Hướng dẫn GUI nhỏ với Python + GTK + 3

Chúng tôi sẽ tạo một chương trình nhỏ với PyGTK 3.0 cũng hoạt động cho PyGTK 3.4. GUI nhỏ này sẽ dạy bạn cách chia một chương trình thành hai hoặc nhiều tệp.

Bạn có thể xem hướng dẫn của Sebastian Pölsterl về PyGTK 3 mới, đây là hướng dẫn mới, mình để lại link:

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

Đây là blog của Sebastian.

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

Một lời chỉ trích về hướng dẫn này của Sebastian là nó không dạy cách chia một chương trình thành nhiều phần hoặc thành nhiều tệp, sẽ rất tốt nếu anh ấy đưa ra một ví dụ về cách thực hiện với PyGTK 3.

Tất cả các chương trình lớn và phức tạp được chia thành nhiều tệp và các tệp thậm chí còn được đặt trong các thư mục khác, tức là chúng nằm trong các thư mục khác nhau.

Hãy bắt đầu với ví dụ nhỏ:

Đây là mã viết trong một tệp duy nhất có tên là gui.py. Chúng tôi mở trình chỉnh sửa văn bản Gedit hoặc trình chỉnh sửa mà chúng tôi sử dụng nhiều nhất, chúng tôi sao chép mã bên dưới và lưu nó dưới dạng gui.py

from gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "\" Open \ "button đã được nhấp vào" def on_close_clicked (self, button): print "Đóng ứng dụng" 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 ("đã nhấp", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Close') self.button.connect ("đã nhấp", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

mặt trận

def on_open_clicked (self, button): print "\" Open \ "đã nhấp vào nút"

Nó là một chức năng được kích hoạt trong thiết bị đầu cuối khi chúng ta nhấp vào nút mở. Tín hiệu để kích hoạt nó là:

self.button.connect ("đã nhấp", self.on_open_clicked) def on_close_clicked (self, button): in "Đang đóng ứng dụng" Gtk.main_quit ()

Nó là một chức năng được kích hoạt khi chúng ta bấm vào nút đóng.

đóng chương trình chúng tôi chạy.

tín hiệu để kích hoạt nó là

self.button.connect ("đã nhấp", self.on_close_clicked) từ nhập gi.repository Gtk ### chúng tôi gọi các thư viện PyGTK ### class gui (): ### định nghĩa lớp được gọi là gui là lớp chính # ##

Khai báo Widget: widget là một chương trình được xác định trước bởi các thư viện GUI mà chúng tôi sử dụng. Ví dụ, một widget là một nút, một cửa sổ, một hộp, v.v. Đây là những widget mà chúng tôi khai báo trong chương trình của mình.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Mở') ### # nút mở #### self.button = Gtk.Button (nhãn = 'Đóng') #### nút đóng #### self.window.add (self.box) #### hộp được chứa trong cửa sổ có tên window #### self.box.pack_start (self.button, True, True, 0) ##### nút nằm trong hộp có tên là box ### self.window.show_all () ## # chúng tôi hiển thị toàn bộ cửa sổ ### gui = gui () ### tạo đối tượng gui ####

Chúng tôi đặt chương trình của mình trong một thư mục được gọi là đơn giản trong trường hợp của chúng tôi trên máy tính để bàn

khoai tây chiên

Chúng tôi mở thư mục bằng thiết bị đầu cuối, trong trường hợp của tôi, tôi sử dụng Nemo từ Linux Mint 14.

đóng

Để biên dịch, chúng tôi đặt trong terminal python gui.py

xem hình ảnh.

thiết bị đầu cuối

Bây giờ chúng ta có thể thấy chương trình nhỏ hoặc tiện ích con mới được tạo bằng các thư viện PyGTK 3

Nó là một cửa sổ đơn giản với hai nút.

Chưa có tiêu đề

Bây giờ chúng ta chia chương trình thành ba phần, sau đó tôi để mã cho ba tệp.

Tệp gui.py đầu tiên

từ gi.repository nhập Gtk từ hủy nhập hủy từ io nhập io lớp gui (hủy, 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 ("đã nhấp", self.on_open_clicked ) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Close') self.button.connect ("đã nhấp", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Tệp io.py thứ hai

class io: def on_open_clicked (self, button): print "\" Open \ "đã nhấp vào nút"

Tệp thứ ba kill.py

từ gi.repository nhập Gtk lớp hủy: def on_close_clicked (self, button): print "Đóng ứng dụng" Gtk.main_quit ()

Chúng tôi đặt ba tệp trong cùng một thư mục trong trường hợp của chúng tôi, thư mục được gọi là chia đơn giản.

đơn giản

Để biên dịch ba tệp. Chúng tôi mở thư mục bằng thiết bị đầu cuối và chỉ cần đặt nó trở lại thiết bị đầu cuối

python gui.py

Các sửa đổi được thực hiện đối với mã gui.py

từ câu lệnh hủy nhập khẩu hủy diệt ### để nhập tệp của chúng tôi hủy diệt.py ### từ câu lệnh io nhập khẩu io ### để nhập tệp của chúng tôi io.py ### class gui (tiêu diệt, io): #### vào lớp chính, chúng tôi thêm các lớp con tiêu diệt và io ####

Bạn có thể thấy rằng câu

def on_open_clicked (self, button): print "\" Open \ "đã nhấp vào nút"

Nó không nằm trong gui.py, nó nằm trong tệp io.py

Kết án

def on_close_clicked (self, button):

in "Đang đóng đơn"
Gtk.main_quit ()

nó nằm trong tệp hủy.py

Như vậy chúng ta có thể chia một chương trình thành nhiều tệp nằm trong các thư mục khác nhau cùng một lúc.

Mặt khác, Python là một trụ cột của phần mềm miễn phí và nó được điều chỉnh để hoạt động với GTK 3.6 /3.8, tên của nó là PyGTK. Sự thích ứng của Python cho KDE được gọi là PyQT.

Python được điều chỉnh cho Mac OS và WINDOWS.

Tôi hy vọng hướng dẫn nhỏ PyGTK3 này hữu ích cho bạn. Họ có thể đưa ra tất cả những lời chỉ trích mang tính xây dựng mà họ muốn.

Tôi cũng biết một số Gtk 3.4 /3.6 và Vala GTK 3.4 / 3.6.

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

Cuối cùng, người dùng KDE xin lỗi vì đã không thực hiện một hướng dẫn nhỏ cho KDE.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   thối87 dijo

    Trong kde, tôi thích sử dụng kdevelop hơn (tôi nghĩ đó là những gì nó được gọi) để tạo gui một cách dễ dàng nhưng tôi vẫn gặp khó khăn trong việc tìm kiếm các quy trình để biến nó thành điều x: '(

  2.   st0rmt4il dijo

    Tuyệt vời cho những người sử dụng Python: D!

    Chúc mừng!

  3.   Pablo dijo

    Xin chào, tôi đã theo dõi cộng đồng này khá lâu và tôi không chắc đây là lần đầu tiên tôi bình luận hay tôi đã làm trước đó rồi 😀 (Tôi thực sự không có hứng thú với việc viết bình luận trên web). Vấn đề là tôi làm điều đó để để lại gợi ý cho Elav và KZKG ^ Gaara với tư cách là quản trị viên, và tôi nghĩ rằng sẽ là một ý tưởng hay khi thêm một plugin để tô màu cú pháp vì gần đây tôi thấy nhiều bài đăng có mã bằng các ngôn ngữ lập trình khác nhau. Tôi biết có khá nhiều plugin nhưng tôi chưa thử cái nào vì tôi không phải là người dùng wordpress, vì vậy tôi để bạn suy nghĩ về khả năng tồn tại của yêu cầu. Tôi nhân cơ hội này để hỏi những độc giả còn lại rằng họ nghĩ gì về ý tưởng này, bởi vì tôi biết rằng có những người ngoài kia thích đọc mã mà không cần tô điểm thêm. Tôi xin lỗi nếu điều này đã được nhận xét ở đây và nó đã bị từ chối vì một số lý do, vì tôi không nhớ đã xem bất kỳ cuộc thảo luận nào về chủ đề này.

    1.    marianogaudix dijo

      Sự thật là tôi muốn có tùy chọn tô màu cú pháp để làm nổi bật mã của ngôn ngữ lập trình.
      Điều đó sẽ giúp ích cho những người dùng muốn học ngôn ngữ lập trình.

      Nhưng này, tôi cũng rất thoải mái với diễn đàn và chúng ta có thể thảo luận và học hỏi cùng nhau.

      1.    eliotime3000 dijo

        GNU Emacs thoải mái hơn, vì ít nhất bạn phải chọn trình kiểm tra ngôn ngữ lập trình mà bạn muốn làm việc (nếu bạn không muốn nặng hơn cho bộ xử lý của mình, hãy sử dụng GNU Nano và tận hưởng sự tối giản ở mức tốt nhất).

        1.    marianogaudix dijo

          Elio chúng ta đang nói về WordPress. Thực hiện trên blog Desde Linux. Nó không có chức năng tô màu chữ của bài viết.

          1.    eliotime3000 dijo

            Oh tôi xin lỗi.

        2.    pandev92 dijo

          Naaa emacs thoải mái cho những người có 84 ngón XD .., người bình thường, textmate, sublimetext hoặc notepad ++ xd

          1.    eliotime3000 dijo

            Điều tuyệt vời là không phải học cách đánh máy, điều này được yêu cầu để có thể xử lý tốt GNU Emacs và các phím tắt của nó. Ngoài ra, GUI của nó giúp bạn dễ dàng sử dụng các menu của nó (nó có thể được sử dụng trong Windows, nhưng bạn không nên làm với chế độ bình thường mà nên làm với chế độ nhắc lệnh để win32 không tẩy chay script của bạn).

  4.   Carper dijo

    Hướng dẫn rất hay. Nhưng nhân tiện, mã nguồn python không được biên dịch, nó là một ngôn ngữ thông dịch.

    1.    giskard dijo

      Nó có thể được biên dịch thành mã giả. Nó không phải là ngôn ngữ máy mà là các byte đại diện cho một cái gì đó với trình thông dịch, nhưng quá trình này cũng được gọi là biên dịch. Theo nghĩa này, có thể nói rằng một cái gì đó được biên dịch.

  5.   hty dijo

    Có lẽ tốt hơn nên học pytgk2 vì phiên bản mới nhất dành cho Windows là 2.24. Series 3 dễ thấy bởi sự vắng mặt của nó. Và những lời dị nghị nói rằng gnome phá vỡ tất cả các apis trong mỗi phiên bản mới.

    1.    marianogaudix dijo

      Tôi lập trình một mockup với GTK 3.4 / 3.6 và sự thật là chúng phá vỡ sự kiên nhẫn và đầu óc của bạn, bạn phải viết lại mã, bây giờ tôi hiểu tại sao những người dùng Linux Mint lại phàn nàn về GTK và dự án GNOME.
      Đối với những người của MINT, tôi đồng ý với GTK 2.4 điều này đã không xảy ra.

  6.   Carlos dijo

    Hướng dẫn tốt và tài liệu tham khảo.
    Chỉ là một chi tiết, vì mã đã được đưa vào, trong Python, việc thụt lề là bắt buộc và cần được tôn trọng trong mã ví dụ.

    Chúc mừng!

    1.    marianogaudix dijo

      Bạn có thể giải thích những nhận dạng bắt buộc trong Python bao gồm những gì không? Tôi nói thật với bạn, tôi chưa bao giờ nghe điều đó. Tôi rất quen với các diễn đàn PyGTK 2/3 bằng tiếng Anh và có thể tôi đã bỏ qua nó.

      1.    giskard dijo

        Trong Python, bạn không sử dụng các khóa như trong C hoặc các khối bắt đầu / kết thúc như trong Pascal, nhưng mọi thứ đều được hiểu thông qua thụt đầu dòng mà bạn cung cấp cho mã. Đó là, các khối được nhận dạng là được thụt lề. Đó là một tính năng mà tôi đặc biệt yêu thích. Bạn tránh viết phím và những thứ tương tự.

        1.    pandev92 dijo

          Tôi không thích điều đó, có vẻ đơn giản hơn khi đặt hai phím nhỏ hoặc một std :: endl ;, hơn là được nhìn thấy nếu dòng xd được lập bảng tốt

          1.    Felipe dijo

            : p Giáo viên lập trình của bạn sẽ đặt số 0 cho bạn. Hoặc tệ hơn họ sẽ sa thải bạn khỏi công việc của bạn. Điều quan trọng nhất là mã có thể đọc được với tất cả những gì ngụ ý

          2.    pandev92 dijo

            kết thúc bằng dấu ngoặc nhọn, nó làm cho tôi dễ đọc hơn nhiều XD ..

          3.    giskard dijo

            Nghiêm túc???


            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);}

            Bạn thấy không? Nếu không có thụt lề thì nó không được hiểu rõ lắm. Và đó là một điều dễ dàng. Với một cái phức tạp hơn, chỉ có trình biên dịch mới hiểu nó. Vấn đề là, vì dù sao thì bạn cũng phải thụt lề (để con người hiểu được mã) tại sao nó lại thừa và sử dụng dấu phân cách? Đủ với thụt lề và thế là xong.

          4.    pandev92 dijo

            Tất nhiên, không có gì được hiểu, bởi vì bạn đang không tôn trọng các quy tắc viết tốt một chương trình trong c / c ++. Những gì bạn đã làm là hợp lệ cho bất kỳ điều gì, chẳng hạn như lồng một hàm, trong một hàm bên trong một hàm khác nằm trong một hàm khác, sau đó tôi muốn gặp bạn xd nếu bạn có thể hiểu nó.

          5.    pandev92 dijo

            nhân tiện, với hai cái nhìn, mã đó dễ hiểu xD

          6.    giskard dijo

            Những gì tôi đã làm, tôi đã làm với mục đích cho bạn thấy rằng không có thụt lề, mặc dù nó đã biên dịch, rất khó để hiểu bất kỳ mã nào. Vì vậy, bạn có 2 quy tắc: Thụt lề và bao gồm các dấu phân cách. Nhưng điều đó là thừa. Trong Python, mã như vậy đơn giản là không được trình thông dịch chấp nhận. Và bạn chỉ có một quy tắc: Thụt lề. Dễ dàng.
            Nhưng này, tất cả mọi người với thị hiếu của họ.

          7.    Atheus dijo

            Cả hai đều tốt, cái thụt vào và không thụt vào, theo ý kiến ​​cá nhân tôi thích kiểu dấu chấm phẩy hoặc ruby, tương tự như python nhưng thụt đầu dòng là không cần thiết.

            Điều này được hiểu rõ hơn: P:

            echo '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, »Tùy chọn không hợp lệ % s \ n », argv [1]); use ();} ++ 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;'

            Xin chào 😀

      2.    giskard dijo

        Tôi nghĩ Carlos có nghĩa là nơi mã xuất hiện không có thụt lề. Điều đó với chỉ sao chép và dán sẽ không hoạt động. Tôi không biết thẻ có tồn tại khi tạo bài đăng hay không để nhập mã ngôn ngữ. Sẽ rất tốt nếu họ đặt nó nếu nó không tồn tại.

        1.    giskard dijo

          Tôi đã thấy vấn đề là gì: Thẻ CODE loại bỏ tất cả các khoảng trắng và tab (nó không nên làm như vậy !!!) Nhưng nếu bạn đặt một nbsp trên đó thì mã có vẻ tốt. A0 trong hệ thập lục phân (160 trong tháng mười hai) mặc dù tôi nghĩ nó có thể phụ thuộc vào phông chữ (tôi không biết). Nếu nó được sử dụng thì nó sẽ xuất hiện như thế này:

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

          Điều đó trong các bài kiểm tra của tôi có vẻ tốt, nhưng tôi không có bản xem trước khi tôi đăng câu trả lời (và phải có điều đó !!!) Nếu nó không xuất hiện, đó không phải là lỗi của tôi.

          1.    marianogaudix dijo

            Nhìn vào các ví dụ mà Sebastian Pölsterl đưa ra trong hướng dẫn PyGTK 3 của mình, Sebastian không đặt nhãn.

            Thí dụ :

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

            bạn có thể xem tất cả hướng dẫn của Sebastian.

          2.    giskard dijo

            Tôi không biêt y của bạn la gi. Những gì tôi đang nói là ở đây, trong các bài viết, không thể sử dụng Thẻ HTML "CODE" để những gì bạn đặt dưới dạng mã và nó xuất hiện được thụt vào trong. Trên trang mà bạn tham khảo, nếu bạn xem các nguồn trang, bạn sẽ thấy rằng nó không sử dụng CODE mà sử dụng các dấu phân cách HTML khác.
            Nó không chống lại mã bạn đưa vào mà chỉ ra một lỗ hổng trong hệ thống đăng bài của trang web này. Mà có lẽ, quản trị viên có thể sửa chữa.
            Khi tôi nói về các thẻ, rõ ràng là tôi đang nói về HTML, không phải Python. Trong mọi trường hợp, nếu bạn đặt mã không có thụt lề trong Python thì nó sẽ không hoạt động. Nếu một người mới đến và sao chép mã xuất hiện trong bài đăng này và cố gắng chạy nó, anh ta sẽ thất bại. Bạn có thể thất vọng vì bạn là một người mới. Một lần nữa, lỗi không phải là của bạn; và trong câu trả lời trước đó ngay lập tức, điều tôi đã làm là đưa ra cách giải quyết vấn đề từ cấp độ người dùng đăng bài.

          3.    marianogaudix dijo

            Bạn hoàn toàn đúng, tôi nên tải ảnh lên thay vì sao chép mã.
            để chỉ ra cách các câu lệnh được sắp xếp đúng trong PyGTK 3.

  7.   Felipe dijo

    Để lập trình với python, tôi khuyên bạn nên sử dụng Eclipse với plugin PyDev hoặc Pychar m

  8.   louis dijo

    Như đã nhận xét ở trên, đó chính xác là lý do tại sao tôi không thích python, vì vấn đề thụt lề. Như chúng ta đã thấy, việc sao chép & dán sẽ không hoạt động, điều này không xảy ra với các ngôn ngữ khác như C, Java, PHP, v.v.

    Điều dễ đọc, chúng tôi áp dụng một trình làm đẹp mã (như http://indentcode.net/ ) và sẵn sàng,

    Lỗi xấu đã được sửa, nhưng nếu không có thụt lề và logic bị thay đổi, chúng tôi nghe có vẻ ..

  9.   Carlos dijo

    Tôi mới sử dụng PyGTK, liệu có thể tương tác với các tập lệnh shell bằng ngôn ngữ này không?

    1.    xin chào dijo

      Cảm ơn vì hướng dẫn.

      Chúc mừng.