Python Entwicklung

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

Weitere Hilfe über mysql-Python Verwendung:

http://mysql-python.sourceforge.net/MySQLdb.html