2016-04-16 6 views
1
#python version 2.7.11 

import os 
from Tkinter import * 

fileName = "Nothing" #fileName is required so that the callback function can link the current file name with button click 

def callback(event): 
    #os.startfile() works only on windows machine 
    os.startfile(fileName) #opens the fileName with its default application (in my case a pdf viewer) 

def makeLink(file): 
    global fileName 
    fileName = file 
    link = Label(textbox, text=fileName, fg="blue", cursor="hand2") 
    link.pack() 
    link.bind("<Button-1>", callback) 

oldDir = os.getcwd() 
newDir = os.chdir("pdf folder") #pdf folder contains some pdf files 

root = Tk() 
textbox = Text(root) 
textbox.pack() 

allFiles = os.listdir(os.getcwd()) #makes a list of files present in current directory 

for file in allFiles: 
    makeLink(file) 

root.mainloop() 

os.chdir(oldDir) 

私は、いくつかのpdfファイルを含むフォルダ(上のコードはpdfフォルダ)のファイルを選択し、 GUIウィンドウ。リンク上でこのボタンを押すと、デフォルトのアプリケーションで開く必要があります(pdfファイルはデフォルトのPDFビューアで開く必要があります)。私のコードは、リンクとして "pdfフォルダ"にあるすべてのファイルのファイル名を表示しています。しかし、すべてのリンクをクリックすると、フォルダの最後のファイルが開きます。誰かがコードを修正して、すべてのリンクがそれ自身のファイルを開くようにすることはできますか?私はどこからでも検索しましたが、このトピックについては何も見つかりませんでした。PythonでTkinter GUIへのリンクとして複数のファイル名をつけてデフォルトのアプリケーションで開く

答えて

0

これはこれまでのコードとまったく同じです。 fileNameをグローバルにして、最後の割り当てがループ内の最後の項目になるようにfileName = fileを設定しています。だから、これが最後のファイルを開いている理由です。ユーザーがこれらのオプションを選択できるようにするには、オプションとしてファイル名のリストを取るコンボボックスまたは他のウィジェットをお勧めします。 <<ComboboxSelected>>にバインドしてmakeLink機能に電話をかけることができます。

また、fileの名前を変更する必要があります。 fileが組み込まれています。

+0

私はコンボボックスについてとても感謝してくれました。それは正常に働いた。 – Syler

0

この問題は確かにコンボボックスで行うことができますが、私は多くのpdfファイルを持っていると、すべてのファイルがコンボボックスに配置されています。 ここでは、2つのカウント変数を取り上げました.1つはグローバルカウントで、もう1つはlocalCountです。 localCountは、どのファイルを開くかを覚えておく必要があります。

from Tkinter import * 
import os 

def callback(count): 
    os.system("open "+fileNames[count]) 

def makeLink(files): 
    localCount = count 
    link = Button(frame1, text=(count , files), bg="light blue", cursor="hand2", command=lambda: callback(localCount)) 
    link.pack()  

oldDir = os.getcwd() 
newDir = os.chdir("pdf folder") 
fileNames = os.listdir(os.getcwd()) 

root = Tk() 
frame1 = Frame(root) 
frame1.pack() 

count = 0 

for files in fileNames: 
    makeLink(files) 
    count += 1 

root.mainloop() 

os.chdir(oldDir) 
関連する問題