Tkinter window and script freeze when filedialog is used - python

Im developing a audio player for python. Unfortunately, it appears as if after a modification, the file dialog portion of the script ceased working. The code below is a minimum reproducible example of the offending bit.
# -----------------------Setup-----------------------
# Imports
from tkinter import *
from tkinter.ttk import *
from tkinter import filedialog
import simpleaudio
import subprocess
# GUI
root = Tk()
root.title("CupPlayer")
menubar = Menu(root)
file = Menu(menubar, tearoff = 0)
root.config(menu = menubar)
# ----------------------Functions---------------------
def file_selector():
filename = filedialog.askopenfilename()
root.update()
if filename.endswith('.mp3'):
subprocess.call(['ffmpeg', '-i', filename,
'audio.wav'])
btn = Button(root, text = 'search file !', bd = '5',
command = file_selector)
mainloop()

Hey #RandomInternetPerson first of all dont use subprocess.call inside a ui loop at all its make freeze and crashing the ui it will wait until subprocess process is open so change it to subprocess.Popen and check if it fixed

Related

How to get a user-selected file and feed it to a python program in Tkinter

I am currently messing about with Tkinter creating an interface for a project I created. The program takes in a bunch of file paths as inputs for it to run. I'm trying to create a tkinter interface where I can upload the 4 files I need or at least somehow get the filepaths and the. feed those to the program. Here is what I have:
import sys
import os
import comparatorclass
from tkinter import *
from tkinter.ttk import *
from tkinter.filedialog import askopenfile
root=Tk()
root.geometry('1000x1000')
def open_file():
file = askopenfile(mode ='r', filetypes =[('Python Files', '*.py')])
if file is not None:
content = file.read()
print(content)
def run_comparator():
comparatorclass.main()
button2 = Button(root, text ='Open', command = lambda:open_file())
button2.pack(side = TOP, pady = 10)
button1 = Button(root,text="hello",command= run_comparator)
button1.pack()
root.mainloop()
as you can see, I have two buttons. The issue I'm having is how to connect my openfile function to my run_comparator function such that the 4 files I need to open are passed on to the run_comparator

Display a msg in Tkinter GUI when a function has completed

I have a simple Tkinter GUI with a button that runs a function to import a file from a local directory..
import tkinter as tk
from tkinter import filedialog
from bs4 import BeautifulSoup
root = tk.Tk()
root.geometry("1000x800")
def import_from_file():
imported_file_name = filedialog.askopenfilename(filetypes = [("All Files" , ".html")])
html_string = open(imported_file_name, 'r')
import_button = tk.Button(root, text= "Import html from file", command = import_from_file)
import_button.place(x=10, y=0)
root.mainloop()
My question is, what is the best way to display a message in the Tkinter GUI eg "Finshed" when that function has run, without closing the GUI?
If i use:
def import_from_file():
imported_file_name = filedialog.askopenfilename(filetypes = [("All Files" , ".html")])
html_string = open(imported_file_name, 'r')
print('Finished')
This will only display Finished in the terminal when the Tkinter GUI is closed if it runs successfully.

Why can't I display an Image in a tkinter Toplevel() window?

I'm trying to create a python program tkinter that, upon the pressing of a button, opens a new full screen tkinter window containing an image and plays an audio file - here's my code:
from tkinter import *
from PIL import Image, ImageTk
from playsound import playsound
def play():
window = Toplevel()
window.attributes('-fullscreen', True)
img = ImageTk.PhotoImage(Image.open("pic.png"))
label = Label(window, image=img).pack()
playsound("song.mp3")
buttonWindow = Tk()
b = Button(buttonWindow, text="Press Button", command=play)
b.pack()
(my image and audio file are both on the desktop with my python file)
However, when I run my code, when I press the button, the audio plays but no second tkinter window opens.
I've tried to destroy() the buttonWindow and have tried many different ways of including an image on a tkinter window - if I remove the line of code using PhotoImage(), the window appears (obviously I then get a syntax error stating that 'img' is not defined).
How could I solve this?
Thanks,
Louis
I had similar problem.
But i resolve this trial and error method.
First of all i don't use pillow library and put image into Label
You should try define Photoimage object NOT IN FUNCTION
Example:
It will work:
import tkinter as tk
root = tk.Tk()
root.geometry("600x400")
def popUp():
popff = tk.Toplevel(root)
popff.geometry("400x200")
labelImgff = tk.Label(popff, image=imgff, bg="white")
labelImgff.grid(row=0, column=0)
imgff = tk.PhotoImage(file="/home/user/image.png")
btnff = tk.Button(text="startPOP", command=popUp)
btnff.grid(column=0,row=0)
root.mainloop()
effect of action
Your playsound() command is blocking execution. The playsound() command has an optional field 'block', which is True by default. Changing this to False will continue execution and allow mainloop() to continue.
Second, just call label.draw() to draw your image to the TopLevel window.
Here's the code:
from tkinter import *
from PIL import Image, ImageTk
from playsound import playsound
def play():
window = Toplevel()
window.attributes('-fullscreen', True)
img = ImageTk.PhotoImage(Image.open("pic.jpeg"))
label = Label(window, image=img).pack()
playsound("song.mp3",block=False)
label.draw()
buttonWindow = Tk()
b = Button(buttonWindow, text="Press Button", command=play)
b.pack()
buttonWindow.mainloop()
Cheers!

How I used tkinter button to Import files

I would like to run a python program and when clicking a button in a (tkinter) window become import files form any direction and store it to another direction and in database .
import tkinter as tk
from tkinter import filedialog
def UploadAction(event=None):
filename = filedialog.askopenfilenames()
print('Selected:', filename)
root = tk.Tk()
button = tk.Button(root, text='import files', command=UploadAction)
button.grid(row=1,column=1,padx=10,pady=10)
root.mainloop()

How to open a exe file using python Tkinter

I am trying to open a exe file from C drive by clicking a button from my GUI and up till now i am unable to select the specific file. Can i know if there is any function to directly open the file in Tkinter. Currently,tkFileDialog.askdirectory only direct me to the FILES.
import Tkinter
import tkMessageBox
import tkFileDialog
import os
import subprocess
top = Tkinter.Tk()
def run():
File = tkFileDialog.askdirectory()
os.system(File)
b = Tkinter.Button(top, text = 'DAQoutput', command= run)
b.pack()
top.mainloop()
Directly using Tkinter? No there is no command for it but you don't need one. Tkinter is a GUI toolkit and that's all it does.
Instead use os.system() to launch your exe.
Your script should look something like this:
import Tkinter
import tkMessageBox
import tkFileDialog
import os
top = Tkinter.Tk()
def run(self):
File = tkFileDialog.askdirectory()
os.system(File)
b = Tkinter.Button(top, text = 'DAQoutput', command= self.run)
b.pack()
top.mainloop()

Categories

Resources