2015-10-29 7 views
1

При создании простого графического загрузчика графического пользовательского интерфейса на python и с помощью Glade3 я застрял с вставкой в ​​текстовое поле ввода с помощью значка.Python - Gtk - вставка из буфера обмена

Приложение и вставьте значок.

enter image description here

код питона:

# !/usr/python 

import sys 
import os 
import subprocess as sp 
try: 
    from gi.repository import Gtk, Gdk 
except: 
    print('Gtk not available') 
    sys.exit(1) 
try: 
    import pyGtk 
    pyGtk.require('2.0') 
except: 
    pass 



class VideoDownloader: 

    def on_mainwindow_destroy(self, object, data=None): 
    print "quit with cancel" 
    Gtk.main_quit() 

    def __init__(self): 
    self.gladefile = "lib/videodownloder.glade" 
    self.builder = Gtk.Builder() 
    self.builder.add_from_file(self.gladefile) 
    self.builder.connect_signals(self) 
    self.go = self.builder.get_object 
    self.window = self.go("mainwindow")  
    self.window.show() 
    self.okbtn = self.go("okbutton") 
    self.cancelbtn = self.go("cancelbutton") 
    #self.restartswitch = self.go("restartswitch") 
    self.contswitch = self.go("contswitch") 
    self.vlcswitch = self.go("vlcswitch") 
    self.urlentry = self.go("urlentry") 
    self.filechooser = self.go("filechooser") 
    self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) 

    def on_urlentry_activate(self, widget): 
    url = self.urlentry.get_text() 
    print("the url is:" + url) 

    def on_urlentry_icon_press(self): 
    text = self.clipboard.set_text(self.urlentry.get_text(), -1) 
    print("the urlentry paste icon was clicked | 'text' ") 

    def on_urlentry_icon_press(self): 
    text = self.clipboard.wait_for_text() 
    print("the urlentry paste icon was clicked | 'text' ") 
    if text != None: 
     self.urlentry.set_text(text) 
     print(" 'text' has been pasted to the urlentry") 
    else: 
     print("No text on the clipboard") 

    def on_filechooser_file_activated(self, widget): 
    myfile = self.filechooser.get_uri() 
    print("the file is: " + myfile) 

    def on_vlcswitch_activate(self, widget): 
    print("VLC Switch has been activated") 

    def on_contswitch_activate(self, widget): 
    print("Continue switch has been acivated") 

    def on_quitbutton_clicked(self, button): 
    print("quit with the close button") 
    Gtk.main_quit() 


    def on_okbutton_clicked(self, button): 
    myfile = self.filechooser.get_uri() 
    url = self.urlentry.get_text() 
    wgetcmd = ("wget -O 'myfile ' 'url' ") 
    print("ok button has been clicked") 
    print("wget will now be run with your args: " +myfile+url) 
    os.system(wgetcmd) 

if __name__ == "__main__": 
    print("videodownloader is running") 
    notify = os.system("notify-send --expire-time=5000 --icon='img/vid-down-logo.png' --app-name=VideoDownloader 'VideoDownloader' 'The VideoDownloader app is now running and ready!'") 
    notify 
    main = VideoDownloader() 
    Gtk.main() 
    print("videodownloader has stopped running") 

Когда я запускаю код он в основном работает, но когда я нажимаю на значок вставки Я получаю сообщение об ошибке:

TypeError: on_urlentry_icon_press() takes exactly 1 argument (4 given) 

Я довольно новый для питона и поляны, поэтому я, вероятно, совершу элементарную ошибку, но я не знаю, что не так и что означает ошибка. Я искал, но нашел только советы, которые не помогли.
Such as this.. Любые предложения по устранению этого, пожалуйста?

+0

Пожалуйста, отредактируйте заголовок вопроса - это не имеет никакого отношения к вставке из буфера обмена. –

+1

Если вы столкнулись с такой ошибкой, определите функцию (в этом случае 'on_urlentry_icon_press' как' on_urlentry_icon_press (self, * args) ', а затем проверите args, чтобы узнать, что вы там получаете. Вы даже можете оставить это определение, если вы ничего не нужно от args. – user4815162342

ответ

2

Ваш текущий метод on_urlentry_icon_press принимает только аргумент self, но он должен принимать более одного, поскольку он подключен к сигналу icon-press.

В documentation вы можете увидеть, что он принимает:

  • записи (ссылка на Gtk.Entry)
  • положения (будь то первичный или вторичный значок)
  • события (например, был ли это двойной щелчок)

Так оно и должно выглядеть следующим образом:

def on_urlentry_icon_press(self, entry, position, event): 
    print('urlentry icon clicked') 
+0

Спасибо @ elya5, отличная информация. – jamiejackherer