Pada tahun 2010 Stefano Palazzo, mengajukan pertanyaan terkait, Menempatkan gtk yang sewenang-wenang. Letakkan di appindicator.Indicator , dan yang serupa ditanyakan di StackOverflow . Dalam kedua kasus konsensusnya adalah Indikator Aplikasi Ubuntu terbatas. Seperti yang dikatakan Michael Ekstrand:
Dukungan menu Application Indicator didasarkan pada menu D-Bus, yang terbatas pada apa yang mereka dukung - mereka hanya mendukung fungsionalitas menu dasar, bukan hal-hal yang lebih eksotis seperti widget sewenang-wenang.
Namun, itu bertentangan dengan apa yang kita lihat pada indikator Bluetooth hari ini, pada 2016: menggunakan toggle switches.
Hal yang sama dapat diamati dengan indikator Ubuntu One dari 13.04:
Jadi jelas ada jalan. Saya telah mempelajari kode sumber indikator-bluetooth, tetapi ditulis dalam Vala. Saya, bagaimanapun, bekerja terutama dalam python, dan belajar Vala hanya untuk menulis ulang semua indikator saya yang sudah ada adalah pekerjaan yang terlalu banyak.
Jadi inti dari pertanyaan: Bagaimana kita bisa menggunakan Gtk.Widgets, atau paling tidak sebuah toggle switch seperti pada indikator Bluetooth, menggunakan Python?
CATATAN : Saya bersedia memberikan karunia pada pertanyaan ini untuk menghargai jawaban yang akan memberikan contoh kerja dengan python . Bahasa lain tidak diterima.
sumber
test = Gtk.CheckMenuItem("Monkey")
berfungsi menambahkan kotak centang, tetapi harus ada lebih banyak. Sementara yang satu karya, satu ini harus bekerja, tapi tidak:Gtk.CheckMenuItemToggled("Monkey")
. Saya cukup yakin itu bisa berhasil. Lihat: developer.gnome.org/gtk3/stable/GtkCheckMenuItem.htmlGtk.ImageMenuItem
sudah ditinggalkan dan tidak disarankan untuk menggunakan btw: developer.gnome.org/gtkmm/stable/deprecated.htmlJawaban:
Masalah ini ada karena AppIndicators membuatnya mudah untuk membuat menu indikator, mereka menghalangi pembuatannya. Mari kita lihat perbedaan antara contoh kode python menggunakan AppIndicator dan satu menggunakan GLib Menu seperti cara kode Bluetooth.
Pertama Anda diperintahkan untuk membuat
gtk.Menu
, ini adalah objek menu Gtk gaya lama yang menggunakanGtk.Action
yang sekarang sudah usang. AppIndicator mengambilgtk.Menu
objek dari Anda selamaset_menu(...)
proses dan mem- parsingnya , mendorong setiap menu yang ditemukannya ke layanan indikator yang dibuat menggunakanlibdbusmenu
. Proses penguraian ini berarti bahwa apa pun yang tidak didukung oleh AppIndicator disaring, apa pun yang Anda lakukan.Selanjutnya mari kita lihat menu Bluetooth. Itu dibuat menggunakan
Gio.Menu
objek, ini adalah menu Gnome gaya baru menggunakanGAction
sistem. Ini kemudian mendaftarkan layanannya sendiri tanpa menggunakanAppIndicator
ataulibdbusmenu
dan mengaturnya menggunakanx-canonical-type
properti khusus untuk membuat widget pengalih yang diteruskan kelibido
untuk penguraian.Seluruh latihan ini sangat buruk, karena itu semua penyesuaian Kesatuan Canonical sendiri. Jadi, begitu persatuan berjalan, tidak ada appatorator lagi pula.
sumber