如何在 Ubuntu 上的 tkinter python 中使文本可点击
how to make text clickable in tkinter python on Ubuntu
我正在 Ubuntu 上的 python 中编写一个程序,用于从文件夹导入和打印视频文件的名称,但它打印为简单文本,而不是可点击的表格.
我想让它们可以单击并在视频播放器 'vlc' 上单击打开。
你能指导我这样做吗?
import io,sys,os,subprocess
from Tkinter import *
def viewFile():
for f in os.listdir(path):
if f.endswith(".h264"):
tex.insert(END,f + "\n")
if __name__ == '__main__':
root = Tk()
mainframe= root.title("FILE MANAGER APPLICATION") # Program Objective
mainframe= root.attributes('-fullscreen', True)
step = LabelFrame(root,text="FILE MANAGER", font = "Arial 20 bold italic")
step.grid(row=0, columnspan=7, sticky='W',padx=100, pady=5, ipadx=130, ipady=25)
Button(step, text="File View", font = "Arial 8 bold italic", activebackground="turquoise", width=30, height=5, command=viewFile).grid (row= 1, column =2)
Button(step, text="Exit", font = "Arial 8 bold italic", activebackground="turquoise", width=20, height=5, command=root.quit).grid (row= 1, column =5)
tex = Text(master=root)
scr=Scrollbar(root,orient =VERTICAL,command=tex.yview)
scr.grid(row=2, column=2, rowspan=15, columnspan=1, sticky=NS)
tex.grid(row=2, column=1, sticky=W)
tex.config(yscrollcommand=scr.set,font=('Arial', 8, 'bold', 'italic'))
global process
path = os.path.expanduser("~/python") # Define path To play, delete, or rename video
root.mainloop()
您可以在文本小部件中为字符范围添加标签,并且可以在标签上设置绑定。因此,一个简单的解决方案是为每个文件名创建一个唯一的标签,并为该标签创建一个唯一的绑定。
例如:
def viewFile():
for f in os.listdir(path):
if f.endswith(".h264"):
linkname="link-" + f
tex.insert(END,f + "\n", linkname)
tex.tag_configure(linkname, foreground="blue", underline=True)
tex.tag_bind(linkname, "<1>", lambda event, filename=f: openFile(filename))
这将导致使用一个参数调用名为 openFile
的函数,该参数是文件名。然后你可以在那个函数中做任何你想做的事。
一个简单的方法是遍历所有文件并为每个文件创建一个按钮,文件名如下所示
fram = Frame(root)
files = os.listdir(path):
for f in range(0, len(files), 1):
if files[f].endswith(".h264"):
name = files[f].split(".")
b = Button(fram, text=name[0])
b.bind('<Button>', openV)
b.grid(row=f, column=1)
现在您的 openV
函数应该看起来像这样才能实际打开文件
def openV(event):
b = event.widget()
properties = b.config() #get all config for this widget, conveniently the only value right now is text
n = properties[0]
bashCommand = "vlc " + n + ".h264" # this is the command to actually be exectuted
os.system(bashCommand)
确保您的系统上安装了 python-swap,否则您将收到 os.system()
错误
您不需要具有唯一 ID,因为同一文件夹中不能存在 2 个具有相同名称和扩展名的文件!
在最后尝试这一行以在 VLC 上打开视频
tex.tag_bind(linkname, "<1>", lambda event, filename =path+'/'+f: subprocess.call(['vlc',filename]))
我正在 Ubuntu 上的 python 中编写一个程序,用于从文件夹导入和打印视频文件的名称,但它打印为简单文本,而不是可点击的表格.
我想让它们可以单击并在视频播放器 'vlc' 上单击打开。
你能指导我这样做吗?
import io,sys,os,subprocess
from Tkinter import *
def viewFile():
for f in os.listdir(path):
if f.endswith(".h264"):
tex.insert(END,f + "\n")
if __name__ == '__main__':
root = Tk()
mainframe= root.title("FILE MANAGER APPLICATION") # Program Objective
mainframe= root.attributes('-fullscreen', True)
step = LabelFrame(root,text="FILE MANAGER", font = "Arial 20 bold italic")
step.grid(row=0, columnspan=7, sticky='W',padx=100, pady=5, ipadx=130, ipady=25)
Button(step, text="File View", font = "Arial 8 bold italic", activebackground="turquoise", width=30, height=5, command=viewFile).grid (row= 1, column =2)
Button(step, text="Exit", font = "Arial 8 bold italic", activebackground="turquoise", width=20, height=5, command=root.quit).grid (row= 1, column =5)
tex = Text(master=root)
scr=Scrollbar(root,orient =VERTICAL,command=tex.yview)
scr.grid(row=2, column=2, rowspan=15, columnspan=1, sticky=NS)
tex.grid(row=2, column=1, sticky=W)
tex.config(yscrollcommand=scr.set,font=('Arial', 8, 'bold', 'italic'))
global process
path = os.path.expanduser("~/python") # Define path To play, delete, or rename video
root.mainloop()
您可以在文本小部件中为字符范围添加标签,并且可以在标签上设置绑定。因此,一个简单的解决方案是为每个文件名创建一个唯一的标签,并为该标签创建一个唯一的绑定。
例如:
def viewFile():
for f in os.listdir(path):
if f.endswith(".h264"):
linkname="link-" + f
tex.insert(END,f + "\n", linkname)
tex.tag_configure(linkname, foreground="blue", underline=True)
tex.tag_bind(linkname, "<1>", lambda event, filename=f: openFile(filename))
这将导致使用一个参数调用名为 openFile
的函数,该参数是文件名。然后你可以在那个函数中做任何你想做的事。
一个简单的方法是遍历所有文件并为每个文件创建一个按钮,文件名如下所示
fram = Frame(root)
files = os.listdir(path):
for f in range(0, len(files), 1):
if files[f].endswith(".h264"):
name = files[f].split(".")
b = Button(fram, text=name[0])
b.bind('<Button>', openV)
b.grid(row=f, column=1)
现在您的 openV
函数应该看起来像这样才能实际打开文件
def openV(event):
b = event.widget()
properties = b.config() #get all config for this widget, conveniently the only value right now is text
n = properties[0]
bashCommand = "vlc " + n + ".h264" # this is the command to actually be exectuted
os.system(bashCommand)
确保您的系统上安装了 python-swap,否则您将收到 os.system()
错误
您不需要具有唯一 ID,因为同一文件夹中不能存在 2 个具有相同名称和扩展名的文件!
在最后尝试这一行以在 VLC 上打开视频
tex.tag_bind(linkname, "<1>", lambda event, filename =path+'/'+f: subprocess.call(['vlc',filename]))