আমি যে জিটিকে অ্যাপ্লিকেশনটি বিকাশ করছি তাতে কীবোর্ড শর্টকাটগুলি কীভাবে তৈরি এবং ব্যবহার করব?


9

আমি পাইথন + জিটিকে উবুন্টু অ্যাপ শোডাউনয়ের জন্য দ্রুত একটি অ্যাপ্লিকেশন তৈরি করছি। আমি এটিকে ডিসক্বুর বলছি। আমি কিছু কীবোর্ড শর্টকাট অন্তর্ভুক্ত করতে চাই।

ওয়েব অনুসন্ধান করে, আমি এই পৃষ্ঠাটি অ্যাক্সেলগ্রুপ এবং gtk_widget_add_accelerator সম্পর্কে এই পৃষ্ঠাটি পেয়েছি তবে কীভাবে এটি শুরু করবেন তা আমি বুঝতে পারি না। আপনি কি আমাকে বলতে পারবেন যে আমি কীভাবে একটি উপযুক্ত সিগন্যাল সংজ্ঞায়িত করব এবং তারপরে এটি আমার অ্যাপ্লিকেশনটিতে ব্যবহার করব?


প্রথম লিঙ্কটি নষ্ট হয়ে গেছে ...
WinEunuuchs2 ইউনিক্স

উত্তর:


8

আমার পাইথন + জিটিকে অ্যাপ্লিকেশনগুলির একটিতে কোডের কিছু বিট এখানে দেওয়া হয়েছে, এই উত্তরের মন্তব্য অনুযায়ী আরও বাড়ানো হয়েছে:

self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...

def add_accelerator(self, widget, accelerator, signal="activate"):
    """Adds a keyboard shortcut"""
    if accelerator is not None:
        #if DEBUG:
            #print accelerator, widget.get_tooltip_text()
        key, mod = Gtk.accelerator_parse(accelerator)
        widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)

আপনাকে ধন্যবাদ কিন্তু আমি এই ত্রুটিটি পেয়েছিলেন: self.add_accelerator(self.quick_add_entry, "<Control>l", signal="grab-focus") AttributeError: 'DiscvurWindow' object has no attribute 'quick_add_entry'। যখন আমি "quick_add_entry" এর একটি ওয়েব অনুসন্ধান চেষ্টা করি তখন আমি এটি কোথাও খুঁজে পাই না। আপনি কি নিশ্চিত যে এটি সঠিক ফাংশন? আমি এর জন্য আরও তথ্য / টিউটোরিয়াল কোথায় পেতে পারি? অতিরিক্ত হিসাবে, "<নিয়ন্ত্রণ> l" এর অর্থ কি Ctrl + l বা এটি একটি ভুল টাইপ?
আগমনর

এটি কোনও ফাংশন নয়, আপনি এক্সিলারেটরের সাথে সংযোগ করছেন যে উইজেটের কেবল এটিই নাম। আমি এটি পরিষ্কার হতে সংশোধন করেছি।
ব্রাইস

আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ। প্রথমত, আমি "জিটিকে" কে "জিটিকে" তে পরিবর্তন করার স্বাধীনতা নিয়েছিলাম। দ্বিতীয়ত, আমি যখন আপনার কোডটি চালিত করি তখন আমি "নামেরর: বিশ্বব্যাপী নাম 'ডিইবিইউজি" সংজ্ঞায়িত করা হয় না "তাই আমি মনে করি এটি আপনার নিজস্ব স্ক্রিপ্ট থেকে একটি পরিবর্তনশীল। তাই আমি এটি আমার নিজস্ব স্ক্রিপ্টে মন্তব্য করেছি। তৃতীয়ত, মন্তব্য করার পরে, আমি ত্রুটিটি পেয়েছি "অ্যাট্রিবিউটআরার: 'ডিস্কভারউইন্ডো' অবজেক্টটির কোনও অ্যাট্রিবিউট 'এক্সিলিটার' নেই"। আমি যদি দুঃখিত হয়ে ওঠার কথা মনে করি তবে ডকুমেন্টেশনটি এখনও আমার কাছে অস্পষ্ট; বিশেষত ডকুমেন্টেশনগুলি বলে যে অ্যাড_সিলারেটরের 6 টি আর্গুমেন্ট দরকার?
আগমনর

ঠিক আছে, আপনাকে নিজেই এক্সিলিটর তৈরি করতে হবে; আমি উদাহরণটি আপডেট করেছি কীভাবে তা দেখানোর জন্য।
ব্রাইস

একটু গবেষণা এবং ব্যর্থ চেষ্টা করার পরে, আমি একটি কাজের স্ক্রিপ্ট পেতে পারি। আপনি দয়া করে এটি যাচাই করতে পারেন? যদি আপনি এটি সঠিক বলে মনে করেন তবে আমি আপনার উত্তরটি সংশোধন করব (বা আপনি করতে পারেন): পেস্ট.বুন্টু ডটকম / 1053516 । ব্রাইস, আমি আপনার পর্যালোচনা অনেক প্রশংসা করব। "অল্প গবেষণা" একটি শ্রুতিমধুরতা ছিল, তবে আমি মনে করি যে কোনও মানুষকে মাছ দেওয়ার চেয়ে কীভাবে মাছ ধরতে হয় তা শেখা ভাল। তাই আবার আপনাকে ধন্যবাদ।
Agmenor

6

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

একটি পাঠ্য সম্পাদকের মধ্যে আসল কোড:

# Accelerators
self.my_accelerators = Gtk.AccelGroup()
self.window = self.builder.get_object("discvur_window")
self.window.add_accel_group(self.my_accelerators)
self.entry = self.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")



def add_accelerator(self, widget, accelerator, signal="activate"):
    """Adds a keyboard shortcut"""
    if accelerator is not None:
        #if DEBUG:
            #print accelerator, widget.get_tooltip_text()
        key, mod = Gtk.accelerator_parse(accelerator)
        widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
        print "The accelerator is well added with the signal " + signal

def on_erasing(self, widget):
    print "It works."

গ্ল্যাডে, আমি আমার উইন্ডোতে "ডিস্কুভার_উইন্ডো" নামে একটি এন্ট্রি 1 নামে একটি জিটিকেইন্ট্রি তৈরি করেছি। 'সিগন্যালস' ট্যাবে আমি সংকেতটিকে "ব্যাকস্পেস" দিয়েছিলাম "অন_রেজিং" নামে একটি হ্যান্ডলার।

এখন, আঘাত Backspaceবা Ctrl+ Bটার্মিনাল প্রিন্ট "এটি কাজ করে"।


এটি উইন্ডোটি বন্ধ করতে Ctrl + F4 শর্টকাটটি অক্ষম করতে ব্যবহার করা যেতে পারে?
জুজার আলী

আপনার মানে আল্ট + এফ 4? আমি জানি না, আমি চেষ্টা করিনি।
Agmenor

আমি Ctrl + F4 এবং Alt + F4 উভয়ই বোঝাতে
চাইছি

2

আমি এই থ্রেডে দেওয়া উত্তরগুলি একটি স্বতন্ত্র উদাহরণে পুনরায় বিতরণ করেছি:

#!/usr/bin/env python2

import signal

from gi.repository import Gtk

def bind_accelerator(accelerators, widget, accelerator, signal='clicked'):
    key, mod = Gtk.accelerator_parse(accelerator)
    widget.add_accelerator(signal, accelerators, key, mod, Gtk.AccelFlags.VISIBLE)

def on_recompute_base_encryption_key_hash(widget):
    print 'Thinking... (This could take forever)'

def main():

    if 'gtk':
        window = Gtk.Window()
        window.connect("delete-event", Gtk.main_quit)

        if 'accelerator-demo':
            # Accelerators
            accelerators = Gtk.AccelGroup()
            window.add_accel_group(accelerators)

            # Widget
            target_widget = Gtk.Button('Recompute Base Encryption Key Hash')
            target_widget.connect('clicked', on_recompute_base_encryption_key_hash)
            window.add(target_widget)

            # Bind
            bind_accelerator(accelerators, target_widget, '<Control>b')

        window.show_all()
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        Gtk.main()

if __name__ == '__main__':
    main()

গিস্ট হিসাবেও উপলব্ধ: https://gist.github.com/thorsummoner/230bed5bbd3380bd5949

নোট: ডিফল্ট সংকেত clickedনা activateকারণ অ্যাপ্লিকেশন হিসাবে সংযুক্ত হবে না ::activateসংকেত কিন্তু Gtk.Button ব্যবহার ::clickedসংকেত।


তাই আমি লক্ষ্য করেছি; clickedএক্সিলারেটরটি ব্যবহার করার সময় খুব তাড়াতাড়ি ছাঁটাই করা যায় তবে বোতামটি দৃশ্যমানভাবে হতাশ হয় না। ব্যবহার করার সময় activate, বোতামটি হতাশাগ্রস্থ হবে, তবে ভিজ্যুয়াল নিম্নচাপটি শেষ হয়ে গেলে কেবল এক্সিলারেটরটি চাপতে পারে।
থারস্মমনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.