Tkinter GUI - невозможно передать аргумент скрипту - PullRequest
0 голосов
/ 30 ноября 2018

Я сделал графический интерфейс с Tkinter и связал скрипт с кнопкой.Я также создал опцию просмотра файлов в моем графическом интерфейсе, и когда я выбираю файл, я сохраняю его путь в переменную с именем «file».То, что я пытаюсь сделать, - это нажать кнопку и запустить скрипт, используя путь, который я сохранил в переменной «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 голосов
/ 01 декабря 2018

Я действительно заставил это работать, но я не знаю, почему это происходит.Все, что я изменил, было вместо того, чтобы вызывать мой скрипт как этот

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

я пропустил команду shell=True, и аргумент правильно передается в скрипт.Поэтому я позвонил subprocess.call(['./verify_script.sh', var.get()]), и все работает отлично, но я не могу понять, почему.Любое объяснение высоко ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...