@OdAs
Начинающий пайтон програмист

Что делать если функция в приложении на ткинтере запускаеться раньше чем была нажата кнопка?

Здравствуйте, за пару вечеров пролистал базу библиотеки Tkinter, и понял, что это идеальное решение для написания програмы которую обещал приятелю. К огромному сожалению у меня появилась проблема следующего характера
При запуске окна приложения, сразу же виполняэться функция main() которую по идеи должна вызывать кнопка, которую я в свою очередь еще не успел нажать.В чем дело? Помогите разобраться)Спасибо огромное)Код снизу : )

from tkinter import *
from subprocess import Popen

root = Tk()

root.title(u'Convert_app')
root.geometry('300x150+300+200') # ширина=300, высота=150, x=300, y=200


class Video_Audio_Convertation:

    def convertation(self, file):
        global name_after
        args = ["ffmpeg", "-i", file, "-vcodec", "copy", "-acodec", "copy", "{}.mp4".format(name_after)]
        process = Popen(args)
        process.wait()

def main(file):
    video = Video_Audio_Convertation()
    fil_e = video.convertation(file)
    return fil_e

FileToConvertName = Text(root, height=1, width=12, font="Arial 14", wrap=WORD)
NewFileName = Text(root, height=1, width=12, font='Arial 14', wrap=WORD)
Conv_Button = Button(root, text="Convert", width=30, height=5, bg="white", fg="black")


name_after = NewFileName.get("1.0", END)
name_of_ = FileToConvertName.get("1.0", END)


Conv_Button.bind("<Button-1>", main(name_of_))       #при нажатии ЛКМ на кнопку вызывается функция Hello


FileToConvertName.pack()
NewFileName.pack()
Conv_Button.pack()                          #расположить кнопку на главном окне
root.mainloop()
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
@kirillinyakin
def main(file):
    def in_main(file)
        video = Video_Audio_Convertation()
        fil_e = video.convertation(file)
    return in_main

Проблема в том, что Вы вызываете сразу функцию, можно немного изменить функцию main, чтобы не менять строчку здесь
Conv_Button.bind("<Button-1>", main(name_of_))
А вообще правильнее
Conv_Button.bind("<Button-1>", main)
Но так как Вам нужно еще в параметры передавать аргумент, то можно сделать, как я в начале сделал. Если что-то непонятно, то спрашивайте
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы