Tkinter GUI-无法将参数传递给脚本

时间:2018-11-30 13:57:02

标签: python shell tkinter

我用Tkinter制作了一个GUI,并将脚本链接到按钮。我还在GUI中创建了一个浏览文件选项,当我选择一个文件时,会将其路径存储到名为“ file”的变量中。我想做的是单击按钮,并使用我存储在变量“文件”中的路径运行脚本,但出现“没有此类文件或目录错误”。该解决方案必须非常明显,但我无法弄清楚。这是我的GUI代码:

from tkinter import *
from tkinter import filedialog
from tkinter import ttk
from tkinter import messagebox
import subprocess

window = Tk()

#modify window 
window.title("Random Title")
window.geometry("600x400")

tab_control = ttk.Notebook(window)

#Creating tabs
tab1 = ttk.Frame(tab_control)
tab2 = ttk.Frame(tab_control)

#Modifying tabs
tab_control.add(tab1, text='Issue')
tab_control.add(tab2, text='Verify')

file = ""

var = StringVar()
var.set("")
w = Entry(tab2,textvariable=var)
w.grid(column=1,row=0)

#Creating button & actions
def issue():
    subprocess.call('./issue_script.sh', shell=True)
    messagebox.showinfo('Issue Certificate', 'Certificate issued successfully!')
btn = Button(tab1, text="Issue Certificate", command=issue) 
btn.grid(column=1, row=5)

def browse():
    file = filedialog.askopenfilename(filetypes = (("all files","*.*"),("Text files","*.txt"))) 
    var.set(file)
    print(file)

btn2 = Button(tab2, text="Browse", command=browse) 
btn2.grid(column=3, row=0)

def verify():

    subprocess.call(['./verify_script.sh', file], shell=True)

btn = Button(tab2, text="Verify Certificate", command=verify) 
btn.grid(column=1, row=5)

tab_control.pack(expand=1, fill='both')

#event loop
window.mainloop()

我还添加了一个print(file)命令,以便查看变量中存储的内容,并获得正确的结果(选择的路径)。也许错误发生在我称为脚本subprocess.call(['./verify_script.sh', file], shell=True)的行中或脚本本身中。这是脚本代码:

#!/bin/bash

echo "Verifying certificate..."

cd

python3 cert-issuer/cert-verifier/cert_verifier/verifier.py $1

1 个答案:

答案 0 :(得分:0)

我实际上使它工作了,但是我不知道为什么会这样。 我所做的只是改变了我的脚本而不是这样

subprocess.call(['./verify_script.sh', var.get()], shell=True)

我忽略了shell=True命令,并且参数正确地传递到了脚本中。 所以我打电话给subprocess.call(['./verify_script.sh', var.get()]),它工作正常,但我不知道为什么。非常感谢任何解释。