Ich verwende python unter linux, deshalb ist in der ersten Zeile des Scripts der Interpreter fest eingegeben.
#!/usr/bin/python
from Tkinter import *
import Tkinter
import sys
import os
import string
import subprocess
import ScrolledText
import _mysql
class Application(Frame):
def loaddata(self):
conn = _mysql.connect("localhost","root","kennwort","mysql")
conn.query("select User from user where User is not null")
r = conn.use_result()
self.choices = r.fetch_row()
#bitte nicht alle systemaufrufe gleichzeitig, weil die sich beeinflussen
#stdout umleiten in Datei
#sys.stdout = file("python-sys-test.txt","w")
#args funktioniert nicht
#subprocess.call(["./shell1.sh","args"],shell=True)
#os.system("./shell1.sh XXX")
for line in os.popen("./shell1.sh YYY").readlines():
print line[:-1]
irgendw = (line[:-1],) + self.choices[1:]
print irgendw
self.choices = irgendw
self.list.insert(END, line[:-1])
#self.choices = ("xxx",) + self.choices[1:]
def ourmenu(self):
menu = x1.get() + x2.get()
lbl.configure(text = menu)
self.TXT.insert(Tkinter.END,menu)
def text_update(self):
number = num.get()
lbl.configure(text = number)
self.TXT.insert(Tkinter.END,number)
def view_selected(self):
x = self.list.curselection()
#print len(x)
#for ii in x:
#self.TXT.insert(Tkinter.END, self.choices[ii])
self.TXT.insert(Tkinter.END, x)
lbl.configure(text = x)
def say_hi(self):
print "hi there, everyone!"
self.TXT.insert(Tkinter.END,"Hye TEXT")
def createWidgets(self):
self.QUIT = Button(self)
self.QUIT["text"] = "QUIT"
self.QUIT["fg"] = "red"
self.QUIT["command"] = self.quit
self.QUIT.pack({"side": "left"})
self.hi_there = Button(self)
self.hi_there["text"] = "Hello",
self.hi_there["command"] = self.say_hi
self.hi_there.pack({"side": "left"})
self.rb1 = Radiobutton(self, text = "First Choice", variable = num, value = 1, command = self.text_update)
self.rb1.pack({"side": "left"})
#rb1.grid()
self.rb2 = Radiobutton(self, text = "Second choice", variable = num, value = 2, command = self.text_update)
self.rb2.pack({"side": "left"})
#rb2.grid()
self.name1 = Checkbutton(self, text = "Pizza", variable = x1, onvalue="Pizza\n", offvalue="")
self.name1.pack({"side": "left"})
self.name2 = Checkbutton(self, text = "Nudeln", variable = x2, onvalue="Nudeln\n", offvalue="")
self.name2.pack({"side": "left"})
self.btn = Button(self, text="Place Order", command = self.ourmenu)
self.btn.pack({"side": "left"})
self.TXT = ScrolledText.ScrolledText(self)
self.TXT.insert(Tkinter.END,"Hallo TEXT")
self.TXT.insert(Tkinter.END,"nochmehr TEXT")
self.TXT.pack({"side": "left"})
#self.choices = ["1","2"]
#self.list = Listbox(root, height=6, selectmode = MULTIPLE)
self.list = Listbox(root, height=6, selectmode = SINGLE)
self.list.pack({"side": "left"})
#list.grid()
#for item in self.choices:
#self.list.insert(END, item)
self.bt2 = Button(root, text = "Click for values", command = self.view_selected)
self.bt2.pack({"side": "left"})
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()
self.loaddata()
root = Tk()
#Fenstertitel
root.title("Fenstertitel")
#Groessenaenderungen
root.maxsize(width=1024, height=600)
root.minsize(width=150, height=100)
root.resizable(width=YES, height=YES)
num = StringVar()
menu = StringVar()
x1 = StringVar()
x2 = StringVar()
app = Application(master=root)
lbl = Label(root, text="Pre-click", bg="#ffffcc")
lbl.pack({"side": "left"})
#lbl.grid(sticky="EW")
app.mainloop()
root.destroy()
Damit kann man das Script direkt von der Shell starten:
./mypython.py |
Bitte beachten, dass das Script nach möglichkeit im UNIX Textformat bleibt und die Datei das Ausführungsrecht hat.
Ggf das Ausführungsrecht mit
chmod u+x mypython.py |
Bitte wegen der Datenbankanbindung auch noch vorher die mysql-Datenbank starten und das Kennwort im Script anpassen.
Der Zugriff auf den X-Server für die graphische Oberfläche funktioniert nicht, wenn der ausführende User ungleich dem User ist, der den X-Server ausführt.
Also nicht als root in einem Shellfenster ausführen, wenn man sonst als normaler User angemeldet ist.
Hinweis für Benutzer auf MAC (Betriebssystem OS-X)
Um python und mysql verwenden zu können muss das mysql-Modul installiert werden.
Dies ist aktuell nicht als Binary zu bekommen, sondern muss selbst compiliert werden.
Download: http://sourceforge.net/projects/mysql-python/?source=dlp
Nach der Installation muss man noch die Umgebungsvariable DYLD_LIBRARY_PATH setzen auf den Pfad, der die Datei „libmysqlclient.18.dylib“ enthält.Suche nach der Datei libmysqlclient.18.dylib
find / -name libmysqlclient.18.dylib |
export DYLD_LIBRARY_PATH= /usr/local/mysql-5 .5.19-osx10.6-x86_64 /lib |