Saya mulai menulis program dengan 'cepat'. Daftar bahasa yang diinginkan akan menjadi salah satu pilihan. Contoh:
languages = ["en", "de"]
Kode cepat (dibuat secara otomatis) yang menangani bagian preferensi terlihat seperti ini:
# Define your preferences dictionary in the __init__.main() function.
# The widget names in the PreferencesTestProjectDialog.ui
# file need to correspond to the keys in the preferences dictionary.
#
# Each preference also need to be defined in the 'widget_methods' map below
# to show up in the dialog itself. Provide three bits of information:
# 1) The first entry is the method on the widget that grabs a value from the
# widget.
# 2) The second entry is the method on the widget that sets the widgets value
# from a stored preference.
# 3) The third entry is a signal the widget will send when the contents have
# been changed by the user. The preferences dictionary is always up to
# date and will signal the rest of the application about these changes.
# The values will be saved to desktopcouch when the application closes.
#
# TODO: replace widget_methods with your own values
widget_methods = {
'languages': ['getter', 'setter', 'changed'],
}
Dalam GUI, sepertinya widget pilihan di gtk untuk daftar adalah ListStore (yang bukan widget, tetapi model, tetapi ditentukan dalam file Glade ...). Dapatkah seseorang memberi tahu saya apa yang akan berfungsi untuk ListStore untuk 'getter'
, 'setter'
dan 'changed'
dalam kode di atas?
Pendekatannya terlihat mudah untuk widget entri sederhana dan semacamnya, tapi saya tidak tahu bagaimana menggunakannya dengan daftar.
Sebagai alternatif, saya tentu saja akan menerima cara lain untuk berurusan dengan daftar sebagai preferensi, asalkan panjang daftar tidak diperbaiki.
sumber
Jawaban:
Penafian: Saya tidak tahu apa-apa tentang cepat sampai saya membaca posting Anda, atau tentang pemrograman gui secara umum dalam hal ini. Karena itu saya sejujurnya tidak punya usaha untuk menjawab pertanyaan ini :)
Konon, cepat adalah proyek yang rapi. Saya memindai sumber boilerplate secara singkat dan mengidentifikasi pendekatan potensial berikut untuk menambahkan preferensi gaya daftar yang didukung ListStore:
set_widget_from_preference
danset_preference
dalam subkelas PreferensiDialog proyek (subkelasnya adalah Preferensi $ PROYEKTOR $ Dialog), dan lakukan sesuatu yang berbeda ketikakey
atauwidget
widget TreeView yang didukung ListStore.Untuk mengujinya, saya menerapkan ketiga gagasan ini - masing-masing berfungsi sebagaimana dimaksud, dan AFAICT, secara identik. Pada akhirnya, yang ketiga (khususnya) tampak paling bersih bagi saya, dan lebih dekat dengan konvensi yang digunakan di seluruh pelat, meskipun pada awalnya mengharapkan yang sebaliknya.
Berikut langkah-langkah yang saya ikuti untuk nomor tiga ...
Menggunakan glade via
quickly design
(cepat 11.10, btw), dan secara longgar mengikuti tutorial ini (bagian 2) , tambahkan widget ScrolledWindow ke Preferensi $ PROYEKNAME $ Dialog.ui, letakkan TreeView ke atasnya, beri nama TreeViewlanguage_treeview
. Buat model ListStore baru untuk TreeView ketika diminta, dan beri nama language_liststore, dll ... akhirnya saya berakhir dengan sesuatu seperti ini:Selanjutnya, tambahkan katalog glade (data / ui / preferensi_ $ PROJECTNAME $ _treeview.xml) dengan konten berikut:
Kemudian, edit Preferensi $ PROYEKNAMA $ Dialog.ui, menambahkan ...
... ke atas, di bawah tag yang diperlukan. Dan ubah atribut kelas language_treeview ke Preferensi $ PROYEKNAME $ TreeView, sebagai persiapan untuk langkah selanjutnya.
Terakhir, tambahkan elemen berikut ke daftar widget_methods di Preferensi $ PROYEKNAME $ Dialog.py
Dan di akhir file yang sama (Preferensi $ PROJECTNAME $ Dialog.py), tambahkan
Jika Anda tertarik melihat upaya saya untuk satu dan dua, saya senang untuk menurut.
Sunting: Untuk pembaca biasa, ganti setiap kemunculan $ PROJECTNAME $ dengan nama sebenarnya dari proyek cepat Anda (sebagaimana ditentukan dalam
quickly create
).HTH!
sumber
Saya sendiri belum mencoba 'cepat', tetapi dengan pengalaman GTK saya akan menggunakan Tombol Radio untuk menangani pemilihan bahasa.
Menonton
toggled
acara bersamabutton.get_active()
metode harus cukup untuk memeriksa apa yang telah dipilih pengguna.sumber
toggled
acara ini dapat digunakan baik untuk tombol yang dipilih maupun yang tidak dipilih, karena itu harus cukup.