পছন্দের হিসাবে তালিকা স্টোরের সাথে দ্রুত আবেদন করুন


10

আমি 'দ্রুত' দিয়ে একটি প্রোগ্রাম লিখতে শুরু করছি। পছন্দসই ভাষার তালিকার একটি পছন্দ হবে। উদাহরণ:

languages = ["en", "de"]

পছন্দের অংশটি হ্যান্ডেল করে (স্বয়ংক্রিয়ভাবে তৈরি) দ্রুত কোডটি দেখতে এমন দেখাচ্ছে:

# 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'],
}

জিইউআইতে, দেখে মনে হচ্ছে কোনও তালিকার জন্য জিটিকে-তে পছন্দের উইজেটটি একটি তালিকার স্টোর (যা কোনও উইজেট নয়, তবে একটি মডেল, তবে এটি গ্ল্যাড ফাইলে সংজ্ঞায়িত করা হয়েছে ...)। কেউ কি আমাকে বলতে পারবেন যে উপরের কোডে 'getter', 'setter'এবং একটি লিস্টস্টোরের জন্য কী কাজ করবে 'changed'?

সহজ এন্ট্রি উইজেট এবং এর জন্য পদ্ধতির সহজ দেখায়, তবে তালিকা সহ এটি কীভাবে ব্যবহার করতে হয় তা আমি জানি না।

বিকল্পভাবে, তালিকার দৈর্ঘ্য নির্ধারিত না থাকলে আমি অবশ্যই পছন্দগুলি তালিকাগুলি পছন্দ হিসাবে বিবেচনা করার জন্য অন্য কোনও উপায় গ্রহণ করব।


প্রশ্নের উত্তর নয়, তবে কেন আপনার অ্যাপ্লিকেশনটির ভাষা পরিবর্তন করতে হবে? ভাষাটি নির্ধারণের জন্য এটি কি কেবল গেটেক্সটেক্স এবং ব্যবহারকারীর সংজ্ঞায়িত লোকেল ব্যবহার করতে পারে না? কোনও অ্যাপ্লিকেশন এর অনুবাদগুলিকে মোকাবেলার জন্য এটি স্ট্যান্ডার্ড উপায়: এটি স্বয়ংক্রিয়ভাবে কাজ করবে এবং আপনার পক্ষে খুব কম কাজ হবে।
ডেভিড প্লানেলা

@ ডেভিডপ্ল্যানে: একটি ভাল প্রশ্ন। এটি ভাষা পরিবর্তন করে না। অ্যাপ্লিকেশনটি একটি ডাটাবেসে টিভি পর্বগুলি সন্ধান করে। যেহেতু অনেক লোক একই সময়ে আরও বেশি ভাষায় কথা বলে তাই তাদের সকলের পর্বগুলি পুনরুদ্ধার করা যায়। উদাহরণ: আমি জার্মান এবং ইংরেজি টিভি পর্বগুলি দেখি।
xubuntix

উত্তর:


2

দাবি পরিত্যাগী: আমি সম্পর্কে কিছু জানতাম না দ্রুত পর্যন্ত আমি তোমার পোস্ট, অথবা যে বিষয়টি জন্য সাধারণভাবে GUI প্রোগ্রামিং সম্পর্কে পড়তে। অতএব আমার কাছে সত্যই এই প্রশ্নের উত্তর দেওয়ার কোনও ব্যবসায় নেই :)

বলেছিল, দ্রুত একটি ঝরঝরে প্রকল্প is আমি বয়লারপ্লেট উত্সটি সংক্ষিপ্তভাবে স্ক্যান করেছি এবং তালিকাস্টোর ব্যাকযুক্ত তালিকা-শৈলীর পছন্দ যুক্ত করার জন্য নিম্নলিখিত সম্ভাব্য পন্থাগুলি সনাক্ত করেছি:

  1. 'বানর-প্যাচ' ডেটা / ইউআই / পছন্দসমূহ $ প্রকল্পের নাম $ ডায়ালগ.উই গ্ল্যাডের সাথে সংজ্ঞায়িত হিসাবে স্টিরিভিউ উইজেট (ডাব্লু / লিস্টস্টোর মডেল) স্ট্যাজে উইজেট_মোথডগুলি সেট করুন এবং সেট করুন।
  2. প্রিফারেন্সস ডায়ালগের প্রকল্পের সাবক্লাসটি প্রয়োগ করুন set_widget_from_preferenceএবং set_preferenceসাবক্লাসে অগ্রাধিকারগুলি $ প্রকল্প প্রকল্প J ডায়ালগ রয়েছে এবং আপনার লিস্টস্টোর সমর্থিত ট্রিভিউউউজেট keyবা যখন widgetথাকবেন তখন আলাদা কিছু করুন ।
  3. গ্লেডের সাথে মিলে যাওয়া কাস্টম উইজেটের সাথে জিটিকে.ট্রিভিউয়ের একটি কাস্টম সাবক্লাস লিখুন ।

এগুলি পরীক্ষা করে দেখার জন্য, আমি এই তিনটি ধারণাকেই বাস্তবায়িত করেছি - প্রত্যেকে ইচ্ছাকৃতভাবে কাজ করেছে, এবং এএএএএফসিটি, একইরকম। শেষ পর্যন্ত, তৃতীয়টি (বিশেষত) আমার কাছে সবচেয়ে পরিষ্কার এবং প্রথমদিকে বিপরীত আশা করা সত্ত্বেও, বয়লারপ্লেট জুড়ে ব্যবহৃত কনভেনশনগুলির কাছাকাছি মনে হয়েছিল।


আমি তিন নম্বরের জন্য যে পদক্ষেপগুলি অনুসরণ করেছি তা এখানে ...

quickly design(দ্রুত ১১.১০, বিটিডব্লিউ) মাধ্যমে গ্ল্যাড ব্যবহার করে এবং শিথিলভাবে এই টিউটোরিয়ালটি অনুসরণ করুন ( খণ্ড ২) , পছন্দগুলি $ প্রকল্প প্রকল্প to ডায়ালগ.উইতে একটি স্ক্রোলড উইন্ডো উইজেট যুক্ত করুন, তার উপর একটি ট্রিউইউ ফেলে দিন, ট্রিভিউয়ের নাম দিন language_treeview। যখন অনুরোধ করা হবে তখন ট্রিভিউয়ের জন্য একটি নতুন তালিকা স্টোর মডেল তৈরি করুন এবং ভাষা_লিস্টস্টোর ইত্যাদি নাম দিন ... শেষ পর্যন্ত আমি এরকম কিছু দিয়ে শেষ করেছি:

ডাঙ্গা-বৈশিষ্ট্য

এরপরে, নিম্নলিখিত বিষয়বস্তুগুলির সাথে একটি গ্লেড ক্যাটালগ (ডেটা / ui / পছন্দ_ $ PROJECTNAME $ _treeview.xML) যুক্ত করুন:

<glade-catalog name="preferences_$PROJECTNAME$_treeview" domain="glade-3"
               depends="gtk+" version="1.0">
  <glade-widget-classes>
    <glade-widget-class title="$PROJECTNAME$ Preferences TreeView" name="Preferences$PROJECTNAME$TreeView"
                        generic-name="Preference$PROJECTNAME$TreeView" parent="GtkTreeView"
                        icon-name="widget-gtk-treeview"/>
  </glade-widget-classes>
</glade-catalog>

তারপরে, অগ্রাধিকারগুলি সম্পাদনা করুন $ PROJECTNAME $ ডায়ালগ.উই, যুক্ত করে ...

<!-- interface-requires preferences_$PROJECTNAME$_treeview 1.0 -->

... শীর্ষে, প্রয়োজনীয় ট্যাগের নিচে। এবং পরবর্তী ধাপের প্রস্তুতির জন্য ভাষা_ট্রিভিউয়ের শ্রেণি বৈশিষ্ট্যটিকে পছন্দসমূহ $ PROJECTNAME $ ট্রিভিউতে পরিবর্তন করুন।

পরিশেষে, পছন্দসমূহ $ PROJECTNAME $ Dialog.py এ উইজেট_মাদিত তালিকায় নিম্নলিখিত উপাদানটি যুক্ত করুন

'language_treeview': ['get_languages', 'set_languages', 'button-release-event']

এবং একই ফাইলটির শেষে (পছন্দসমূহ $ PROJECTNAME $ Dialog.py) যোগ করুন

import gtk

ALL_LANGUAGES = [
  'en', 'uk', 'de', 'fr', # ... much longer list
]

class Preferences$PROJECTNAME$TreeView(gtk.TreeView):
    __gtype_name__ = "Preferences$PROJECTNAME$TreeView"

    def __init__(self, *args):
        super(Preferences$PROJECTNAME$TreeView, self).__init__(*args)
        self.get_selection().set_mode(gtk.SELECTION_MULTIPLE)

    # loads the liststore with all languages, 
    # selecting/highlighting in the treeview those 
    # already retrieved from previously saved preferences
    def set_languages(self, preferred_languages):
        model = self.get_model()
        for row, lang in enumerate(ALL_LANGUAGES):
            model.append([lang])
            if lang in preferred_languages:
                self.get_selection().select_iter(model.get_iter(row))

    # collects only the selected languages in the treeview
    # to save in the preferences database
    def get_languages(self):
        model, rows = self.get_selection().get_selected_rows()
        result = [model.get_value(model.get_iter(row), 0) for row in rows]
        return result

আপনি যদি আমার এবং দু'একবারের প্রচেষ্টা দেখতে আগ্রহী হন তবে আমি বাধ্য হয়ে খুশি।

সম্পাদনা করুন: নৈমিত্তিক পাঠকের জন্য, আপনার দ্রুত প্রকল্পের প্রকৃত নাম (যেমন উল্লিখিত হয়েছে ) এর সাথে $ PROJECTNAME of এর যে কোনও ঘটনাকে প্রতিস্থাপন করুন ।quickly create

আছে HTH!


এটি খুব ভালভাবে কাজ করে এবং বেশ স্পষ্ট বলে মনে হচ্ছে, সুতরাং অন্য দুটি চেষ্টা করার প্রয়োজন নেই, তবে তাদের চেষ্টা করার জন্য আপনাকে আবারও ধন্যবাদ ... আপনার উত্তরটি যেহেতু দীর্ঘ, তবে এখনও পরিষ্কার, আপনি এটি একটি সম্পূর্ণ টিউটোরিয়ালটিতে এখানে প্রসারিত করতে চাইতে পারেন: বিকাশকারী.উবুন্টু / রিসোর্স / টিউটোরিয়ালস / যাইহোক: আবারো ধন্যবাদ!
xubuntix

@ এক্সুবুনটিক্স এটি একটি আকর্ষণীয় ধারণা, আমি এটি সন্ধান করব। লিঙ্ক এবং প্রতিনিধি জন্য ধন্যবাদ!
mwalsh

0

আমি নিজে 'দ্রুত' চেষ্টা করে দেখিনি, তবে আমার জিটিকে অভিজ্ঞতার সাথে আমি ভাষা নির্বাচন পরিচালনা করতে রেডিও বোতামগুলি ব্যবহার করেছি ।

পদ্ধতিটি toggledসহ ইভেন্টটি দেখার পক্ষে button.get_active()ব্যবহারকারী কী নির্বাচন করেছেন তা যাচাই করার জন্য যথেষ্ট হওয়া উচিত।


আপনার পরামর্শ অনুসারে, আমি আবারও রেডিও বোতামগুলির দিকে তাকালাম তবে এটি আদর্শ বলে মনে হয় না: যেহেতু সম্ভাব্য ভাষার তালিকাটি দীর্ঘতর হয় তবে রেডিও বোতামগুলি খুব সুন্দরভাবে দেওয়া যেতে পারে, তবে একমাত্র বিকল্পের জন্য আলাদা আলাদা উইজেট থাকতে হবে যা অতিরিক্ত রেডিওব্যাটন যুক্ত করে, এবং সমস্ত রেডিওব্যাটন সর্বদা সক্রিয় থাকে। এটা খুব সুন্দর মনে হচ্ছে না।
xubuntix

আপনি রেডিও গ্রুপগুলি সঠিকভাবে ব্যবহার করছেন তা নিশ্চিত করুন। এছাড়াও, toggledইভেন্টটি নির্বাচিত এবং বাছাই করা বাটন উভয়ের জন্যই ব্যবহার করা যেতে পারে, এজন্য এটি যথেষ্ট হওয়া উচিত।
আলেকজান্দ্রে

আমার অভিপ্রায়টি হ'ল: 200 রেডিও বোতাম থাকা ভাল ব্যবহারকারীর ইন্টারফেস নয়। আমার যা প্রয়োজন তা হ'ল একটি তালিকা সংরক্ষণ করার একটি উপায় যেখানে আইটেমগুলি যোগ করা যেতে পারে এবং চাহিদা অনুযায়ী মুছে ফেলা যায়।
xubuntix
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.