ব্যবহারকারী উইন্ডোটির আকার পরিবর্তন করলে GtkIconView স্বয়ংক্রিয়ভাবে আইকন দিয়ে স্থান পূরণ করে না


9

উবুন্টু সম্পন্ন প্রকল্পে আমাদের কয়েকটি অসাধারণ বাগ রয়েছে:

যথা আমাদের কাছে একটি পৃষ্ঠায় একটি GtkNotebook এবং একটি GtkIconView এবং অন্য পৃষ্ঠায় অন্য একটি উইন্ডো রয়েছে।

ব্যবহারকারী যখন উইন্ডোটিকে পুনরায় আকার দেয় তখন আইকনভিউটি স্বয়ংক্রিয়ভাবে আইকনগুলির সাহায্যে স্থানটি পূরণ করে না (তারা তাদের মূল কলাম লেআউটে থাকে) তবে ব্যবহারকারী যদি GtkNotebook পৃষ্ঠাগুলি পরিবর্তন করে এবং এইভাবে আইকন দৃশ্যের সতেজতা দেয় তবে প্রত্যাশা অনুযায়ী স্থানটি নেওয়া হয়। উইন্ডোটির আকার পরিবর্তন করার সময় আমরা কীভাবে স্বয়ংক্রিয়ভাবে স্থানটি ব্যবহার করতে পারি?

তবে এর চেয়ে বেশি গুরুত্বপূর্ণ বিষয়টি হ'ল উইন্ডোটি উপস্থিত হওয়ার সাথে সাথে আমরা এটিকে ছোট আকার পরিবর্তন করতে পারি - মনে হয় যেন আইকনভিউ আমাদের আকার পরিবর্তন করতে বাধা দিচ্ছে এবং আইকনগুলির জন্য একটি স্ক্রোলযোগ্য অঞ্চল রয়েছে।

কোডটি এরকম দেখাচ্ছে। আইকনভিউগুলি চালিত তালিকার স্টোরগুলি:

    self.trophystore = Gtk.ListStore(str, GdkPixbuf.Pixbuf, bool, bool, str, str) # title, icon accomplished, locked, app, accomplishment
    self.trophystore.set_sort_column_id(COL_TITLE, Gtk.SortType.ASCENDING)
    self.trophy_icon.set_model(self.trophystore)

    self.oppstore = Gtk.ListStore(str, GdkPixbuf.Pixbuf, bool, bool, str, str) # title, icon, accomplished, locked, app, accomplishment
    self.oppstore.set_sort_column_id(COL_TITLE, Gtk.SortType.ASCENDING)
    self.opp_icon.set_model(self.oppstore)

    self.trophy_icon.set_text_column(COL_TITLE)
    self.trophy_icon.set_pixbuf_column(COL_PIXBUF)

    self.opp_icon.set_text_column(COL_TITLE)
    self.opp_icon.set_pixbuf_column(COL_PIXBUF)

এগুলি ব্যতীত, আমরা আইকনভিউগুলি নিয়ে সত্যই ঘুরে দেখি না, ভিউগুলি আপডেট করার জন্য আমরা কেবল তালিকা স্টোরগুলিতে সামগ্রী যুক্ত করি।

প্রকল্পের কোডটি এখানে রয়েছে - কেউ কীভাবে সুপারিশ করতে পারেন যে আমরা কীভাবে এই দুটি সমস্যা সমাধান করতে পারি?


কেবল একটি ব্যাখ্যা: যখন ব্যবহারকারী নোটবুকের পৃষ্ঠাগুলি পরিবর্তন করে, অ্যাপ্লিকেশন কোডটি অন্তর্নিহিত মডেলটি সাফ করে এবং সমস্ত আইটেম আবার যুক্ত করে, যা GtkIconView এর জন্য খালি স্থানটি রিফ্রেশ এবং ব্যবহার করার কারণ বলে মনে হয়।
রাফা সিলেক

উত্তর:


3

ঠিক আছে, যেহেতু আমাদের কীভাবে এটি ঠিক করা যায়, আমি সমাধানটি এখানে বর্ণনা করব, অন্য কারও যদি এই সমস্যা থাকে তবে।

কৌশলটি হ'ল GtkIconView কে একটি GtkScrolledWindow এ স্থাপন করা এবং এটি hscrolbar_policy "সর্বদা" সেট করা। তারপরে, ব্যবহারকারী যখন উইন্ডোটির আকার পরিবর্তন করে তখন প্রতিক্রিয়া জানাতে একটি চেক-রাইজ সিগন্যাল ব্যবহার করতে হবে (নোটটি আকারটি পরিবর্তিত হয়েছে কিনা তা অবশ্যই পরীক্ষা করা উচিত, উদাহরণস্বরূপ উইন্ডোটি চারপাশে টেনে আনলে সিগন্যালটি নির্গত হয়)।

যখন আকার পরিবর্তন হয়, GtkIconView দ্বারা ব্যবহৃত মডেলটি সাফ করে পুনরায় তৈরি করতে হবে, কারণ এটি GtkIconView কে সঠিকভাবে সদ্য প্রাপ্ত স্থান (বা সঙ্কুচিত) পুনরায় স্থানান্তর করতে শুরু করে। এছাড়াও, ফলস্বরূপ অনুভূমিক স্ক্রোলবারটি কখনই দেখা যাবে না, কারণ জিটিকিআইকনভিউ GtkScrolledWindow ব্যবহার করে ঠিক তেমন স্থান ব্যবহার করে।


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

1

এই সমস্যাটির জন্য আমার পছন্দসই সমাধানটি জিটিকে.আইকনভিউয়ের একটি খুব ছোট সাবক্লাস:

class FluidIconView (Gtk.IconView):
    def __init__ (self):
        Gtk.IconView.__init__ (self)
        self.connect ("size-allocate", FluidIconView.on_size_allocate)

    def do_get_preferred_width (self):
        return (0,0)

    def on_size_allocate (self, allocation):
        [self.set_columns (m) for m in [1,self.get_columns ()]]

Get_preferred_width ওভাররাইডটি দৃশ্যকে নির্বিচারে সংকীর্ণ হতে দেয়। আকার-বরাদ্দ কলব্যাক কলামগুলির সংখ্যা 1 এবং পিছনে সেট করে একটি রিলেআউটকে বাধ্য করে।


1

আকার পরিবর্তন হলে আপনি কলামগুলি 0 এ এবং -1 এ ফিরে যেতে পারেন। এইভাবে আইকনগুলি অনির্বাচিত হবে না:

iconview.set_columns(0)
iconview.set_columns(-1)

(এটি @ রাফলিস্ল্যাকের উত্তর ছাড়াও করা উচিত ))


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