Weird behavior of pyperclip

301 views Asked by At

I am trying to copy the selected word from Text widget in Tkinter. Copying text using pyperclip.copy(text) worked perfectly but when I try to paste the copied text using pyperclip.paste() but got ᥈H֛ as output. I don't how this has happened and what causes this to happen.

System: Windows 10

Python Version: 3.7.8

Code Snippet


def get_selected_text(self):
    '''Return the selected text if selection is available'''

    try:
        return self.text_widget.get('sel.first', 'sel.last').strip().strip('\n')

    except TclError:
        if 'found' in self.text_widget.tag_names():
            return self.text_widget.get('found.first', 'found.last').strip().strip('\n')

def copy(self, event=None):
    '''Copy functionality when user clicks cut option or presses Ctrl+C'''

    text = self.get_selected_text()
    pyperclip.copy(text)

def paste(self, event=None):
    '''Cut functionality when user clicks cut option or presses Ctrl+X'''

    cursor_pos = self.text_widget.index('insert')
    print(pyperclip.paste())   # Getting weird value '䯀͏H؂' but when called inside copy function then I get the exact value but not in this function
    self.text_widget.insert(cursor_pos, pyperclip.paste())
    self.text_widget.see(cursor_pos)

    return 'break'

Output Image

What am I doing wrong?

1

There are 1 answers

0
Ghanteyyy On BEST ANSWER

This is not the problem of the pyperclip. The real problem lies in my code itself. So, the problem was that I have bind ctrl+c to copy and ctrl+X to cut text. According to this if return break not found in the function then the default binding by the widget and the custom binding gets executed which means when I press 'Ctrl+X then paste function is executed before the default binding and when default binding by the text widget itself then the weird text gets printed could not figure why this happens

But adding return break at the end of copy, cut and paste function solved my problem.