简体   繁体   中英

I would like to pass the value entered into the textbox to a python program

I wrote this code

app = Tk()
app.title('Myapp')
app.geometry('260x100+50+50')

labelText =StringVar()
labelText.set('Insert the version you want to check')
label1 = Label(app, textvar=labelText, height=4)
label1.pack()

stringadacercare = StringVar(None)
lastringa = Entry(app, textvar=stringadacercare)
lastringa.place(x=30, y=40, width=200)


progressbar = ttk.Progressbar(orient=HORIZONTAL, length=260, mode='determinate')
progressbar.pack(side='bottom')
progressbar.start()

app.mainloop()

I would like to pass the input taken by the textbox into this program instead of the raw_input so binding it to testV

 import csv
 import re
 import os
 testV = raw_input('Insert the version you want to find: ')
 fileobj = csv.reader(open('c:\\paths1.csv', 'rb'), delimiter=' ', quotechar='|')
 for row in fileobj:

for x in row:
    with open(x) as f:
        for line in f:

            if re.match(testV, line):
                print 'The version match: '+ line
            else:
                print 'wrong version'     
    filesize= os.path.getsize(x)
print 'The file size is :'+ str(filesize) +' bytes';

Could anyone help me out? Thank you in advance!!!!!

Are you sure you wan to use the second script as a seperate program? If you must, you can use the subprocess module to pass a variable as a command line argument.

Setup the GUI to use a button and callback something like this:

import subprocess
from Tkinter import *
import ttk

def btnCallback():
    #this is the path to your other script
    cmdpath = '/path/to/test.py'

    #extract the textbox variable
    var = stringadacercare.get()

    progressbar.start()

    #pass the variable to the command line
    proc = subprocess.popen([cmdpath,var])

    #block while the subprocess executes
    proc.wait()

    progressbar.stop()

app = Tk()
app.title('Myapp')
app.geometry('260x100+50+50')

labelText =StringVar()
labelText.set('Insert the version you want to check')
label1 = Label(app, textvar=labelText, height=4)
label1.pack()

stringadacercare = StringVar(None)
lastringa = Entry(app, textvar=stringadacercare)
lastringa.place(x=30, y=40, width=200)

progressbar = ttk.Progressbar(orient=HORIZONTAL, length=260, mode='determinate')
progressbar.pack(side='bottom')

#use a button to execute the subprocess
buttonOK = Button(app,text='GO',command=btnCallback)
buttonOK.pack(side='bottom')

app.mainloop() 

Restructure your test script to accept command line arguments. You could also import this into your gui app and call the main function, passing the variable directly.

import csv
import re
import os

#need the sys module to get the command line args
import sys

def main(testV):
    fileobj = csv.reader(open('c:\\paths1.csv', 'rb'), delimiter=' ', quotechar='|')

    for row in fileobj:
        for x in row:
            with open(x) as f:
                for line in f:
                    if re.match(testV, line):
                        print 'The version match: '+ line
                    else:
                        print 'wrong version'
                        filesize= os.path.getsize(x)
                        print 'The file size is :'+ str(filesize) +' bytes'

if __name__=='__main__':
    #get the first command line argument and pass it to main
    testV = sys.argv[1]
    main(testV)

If you want to use the test routine as a module instead of by the command line you can add an import statement for your test module and call it from the button callback.

...
import mytestmodule

def btnCallback():
    #extract the textbox variable
    var = stringadacercare.get()

    progressbar.start()

    #call the main function from the test module
    mytestmodule.main(var)

    progressbar.stop()

...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM