如何在Python GTK中的subprocess.call()中引用文本输入小部件的输入?

时间:2017-01-10 18:00:34

标签: pygtk

如何在Python GTK中的subprocess.call()中引用文本输入小部件的输入?用于从PyGTK调用生物信息学工具的应用程序:

        #!/usr/bin/env python

        import pygtk 
        pygtk.require('2.0')
        import gtk 
        import subprocess

       class EntryExample:
       def enter_callback(self, widget, entry):
           entry_text = entry.get_text()
           print "Entry contents: %s\n" % entry_text

       def entry_toggle_editable(self, checkbutton, entry):
           entry.set_editable(checkbutton.get_active())

       def entry_toggle_visibility(self, checkbutton, entry):
           entry.set_visibility(checkbutton.get_active())

       def __init__(self):
           # create a new window
           window = gtk.Window(gtk.WINDOW_TOPLEVEL)
           window.set_size_request(200, 100)
           window.set_title("GTK Entry")
           window.connect("delete_event", lambda w,e: gtk.main_quit())

           vbox = gtk.VBox(False, 0)
           window.add(vbox)
           vbox.show()
           entry = gtk.Entry()
           entry.set_max_length(50)
           entry.connect("activate", self.enter_callback, entry)
           entry.set_text("Insert")
           entry.insert_text(" SRA accession number", len(entry.get_text()))
           entry.select_region(0, len(entry.get_text()))
           vbox.pack_start(entry, True, True, 0)
           entry.show()
           hbox = gtk.HBox(False, 0)
           vbox.add(hbox)
           hbox.show()

           # Create a new button for running Linux Shell script
           buttonscript = gtk.Button(label="Download", stock=None)

           # Connect the "clicked" signal of the button to the function

           buttonscript.connect("clicked", runlinuxshell )
           vbox.pack_start(buttonscript, True, True, 0)
           buttonscript.set_flags(gtk.CAN_DEFAULT)
           buttonscript.grab_default()
           buttonscript.show()


           button = gtk.Button(stock=gtk.STOCK_CLOSE)
           button.connect("clicked", lambda w: gtk.main_quit())
           vbox.pack_start(button, True, True, 0)
           button.set_flags(gtk.CAN_DEFAULT)
           button.grab_default()
           button.show()
           window.show()
    def runlinuxshell ():   

    subprocess.call('$i=len(entry.get_text()) # Error is here

    echo $i

    ./fastq-dump --split-files $i -v')


   def main():
       gtk.main()
       return 0



   if __name__ == "__main__":
       EntryExample()
       main()

如何将小部件的文本输入传递到suprocess.call()? 关于如何在PyGTK中调用生物信息学linux工具有什么好的例子吗?

1 个答案:

答案 0 :(得分:0)

免责声明:该示例使用带有内省的pygobject,而不是pygtk,它已被弃用多年,不应在新代码中使用。

免责声明2:样本可以大大改进,至少可以说,它只是对原始脚本的改编。

您可能会执行以下操作:

import gi
from gi.repository import Gtk
import subprocess

class EntryExample:
    def __init__(self):
        window = Gtk.Window()
        window.set_size_request(200, 100)
        window.set_title("GTK Entry")
        window.connect("delete_event", Gtk.main_quit)

        vbox = Gtk.VBox(False, 0)
        window.add(vbox)
        self.entry = Gtk.Entry()
        self.entry.set_max_length(50)
        self.entry.set_text("SRA accession number")
        vbox.pack_start(self.entry, True, True, 0)

        buttonscript = Gtk.Button(label="Download", stock=None)
        buttonscript.connect("clicked", self.runlinuxshell)
        vbox.pack_start(buttonscript, True, True, 0)

        button = Gtk.Button(stock=Gtk.STOCK_CLOSE)
        button.connect("clicked", Gtk.main_quit)
        vbox.pack_start(button, True, True, 0)
        window.show_all()

    def runlinuxshell (self, widget):   
        mylen = len(self.entry.get_text())
        # Here you will execute your subprocess with mylen

    def main(self):
        Gtk.main()

if __name__ == "__main__":
    sub = EntryExample()
    sub.main()