Ich habe eine Excel-Tabelle, von der ich Informationen herüberhole. Dies wird wahrscheinlich irgendwann in eine Datenbank geändert werden, aber für den Test ist es in Ordnung. Es verfügt über zwei Spalten mit Daten und wie folgt aussieht:Python Tkinter Radioknöpfe aus einer Wörterbuchliste
Key | ProgramName | Path
0 | Calculator | C:\Windows\System32\calc.exe
1 | Notepad | C:\Windows\System32\notepad.exe
ich eine ziemlich grundlegende GUI mit Python Tkinter und die xlrd Bibliothek verwendet gebaut habe Daten aus der Tabelle in eine Liste zu extrahieren, die Wörterbucheinträge enthält.
https://pypi.python.org/pypi/xlrd
Das gibt mir eine Liste mit Wörterbucheinträgen:
[{'Path':'C:\Windows\System32\notepad.exe', 'Program':'Notepad', 'Key':0.0}, {'Path':'C:\Windows\System32\calc.exe', 'Program':'Calculator', 'Key':1.0}]
Ich kann die Radio-Buttons erhalten arbeiten anständig, aber ich bin ein Problem mit den Pfaddaten ziehen und wiederverwenden, da ich wird (hoffentlich) subprocess.Popen verwenden, um das ausgewählte Programm tatsächlich zu öffnen.
Heres der Code so weit:
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()
nicht sicher, was ich tun muss, so dass, wenn die programRun Taste gedrückt wird, wird richtigen Pfad gezogen, so kann ich es in einen „subprocess.Popen“ Befehl setzen . Muss ich eine andere Variable erstellen? Kann ich diese Informationen mit einem Wörterbuchschlüssel abrufen?
Alle Vorschläge werden sehr geschätzt.
Überprüfen Sie Ihre Formatierung. Es sieht so aus als ob 'programRun' eingerückt sein sollte. –