我有一個Excel電子表格,我正在從中提取信息。這可能會在某個時候變成數據庫,但現在可以用於測試。它與數據兩列,看起來像:從字典列表中選擇Python Tkinter單選按鈕
Key | ProgramName | Path
0 | Calculator | C:\Windows\System32\calc.exe
1 | Notepad | C:\Windows\System32\notepad.exe
我已經建立了使用Python Tkinter的一個非常基本的圖形用戶界面,並使用xlrd庫從電子表格中的數據提取到一個包含字典條目列表。
https://pypi.python.org/pypi/xlrd
這給我的字典項的列表:
[{'Path':'C:\Windows\System32\notepad.exe', 'Program':'Notepad', 'Key':0.0}, {'Path':'C:\Windows\System32\calc.exe', 'Program':'Calculator', 'Key':1.0}]
我可以得到單選按鈕體面的工作,但我有一個問題,拉路徑數據,並重新使用它,因爲我將(希望)使用subprocess.Popen實際打開選定的程序。
繼承人的代碼至今:
from Tkinter import *
from xlrd import open_workbook
import os
import subprocess
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
bottomframe= Frame(master)
bottomframe.pack(side = BOTTOM)
book = open_workbook('programlist.xls')
sheet = book.sheet_by_index(0)
# read header values into the list
keys = [sheet.cell(0, col_index).value for col_index in xrange(sheet.ncols)]
global dict_list
dict_list = []
for row_index in xrange(1, sheet.nrows):
d = {keys[col_index]: sheet.cell(row_index, col_index).value
for col_index in xrange(sheet.ncols)}
dict_list.append(d)
self.w = StringVar()
self.w.set(dict_list[0]['Key']) # initialize
for eachprogram in dict_list:
self.c = Radiobutton(master, text=eachprogram['Program'], variable=self.w, value=eachprogram['Key'])
self.c.pack(anchor=W)
self.quitButton = Button(
bottomframe, text="QUIT" , fg="red", command=frame.quit
)
self.quitButton.pack(side=LEFT, anchor=S)
self.programRun = Button(bottomframe, text="Run", command=self.programRun)
self.programRun.pack(side=LEFT, anchor=S)
def programRun(self):
???
root = Tk()
app = App(root)
root.mainloop()
root.destroy()
不知道我需要做的,這樣當按下programRun按鈕時,正確的路徑被拉到這樣我就可以把它變成一個「subprocess.Popen」命令。 我是否需要創建另一個變量?我可以使用字典鍵來獲取這些信息嗎?
任何建議,非常感謝。
檢查您的格式。它看起來像'programRun'應該縮進。 –