Vorgabe bei raw_input

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Hallo,
ich möchte das bei einer Eingabeaufforderung nicht nur der Normale Test steht, sondern auch noch eine Vorgabe, die man als Nutzer wärend der Eingabe editieren kann.
Zum Beispiel :
Ihre Name : Hans Mustermann <----- Das kann der Nutzer nach
| belieben verändern.
|
Das Normale
Argument
(unveränderbar)

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Hanman,

hast Du Dein Posting eigentlich selber mal durchgelesen, also ich werd da nicht so ganz schlau draus.

Wenn Du, eine Standarteingabe haben willst, wenn der User ohne etwas einzueben Enter drückt. Kannst Du das so machen.

Code: Alles auswählen

eingabe = raw_input("Programmiersparche : (Python) ")
if not eingabe:
    eingabe = "Python"
#Eingabe verarbeiten
#print eingabe

Gruß

Dookie
Gast

Hallo,
ich wollte eigentlich wissen, ob man mit Python einer Eingabe einen Text zuweisen kann, der vom Nutzer editierbar ist.

Um noch mal das Beispiel zu nehmen :

Bei einer Eingabe soll man seinen Namen oder irgentetwas anderes eingeben. Das wäre dann ja einfach raw_input("Ihr Name : "). Ich möchte aber, das hinter dem Doppelpunkt noch etwas steht was der Nutzer selber verändern kann. Es soll also im Shell etwas wie : Ihr Name : Hans Mustermann erscheinen, aber das Hans Mustermann soll man löschen können um seinen eigenen Namen einzugeben.

Gruß Hanman
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Ja klar kann man mit Python sowas machen.
raw_input ist aber die falsche Funktion.
du wirst curses dafür brauchen.


Gruß

Dookie
Gast

Danke :), die Sachen die in der Dokumentation auf python.org stehen hören sich ja schonmal sehr gut an, doch ich habe auch anderen Seiten gelesen, das dieses Modul nicht in der Windows Distribution enthalten sei und auch nicht komplett Windows kompatibel sei.

Gruß Hanman
Gast

So ich habe mich jetzt nochmal informiert und das Modul WConio gefunden. Gibt es in diesem Modul auch eine Funktion die soetwas kann, ich hab nähmlich keine gefunden. Oder gibt es noch andere alternatioven für Windows?

Gruß Hanman
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Wenns schon unter Windows sein muss, warum nimmst Du nicht gleich Tkinter? Das ist so weit ich weiss, bei der Windowsversion von Python schon dabei.


Gruß

Dookie
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Vielleicht will er ja ein Consolenscript schreiben, was er dann per Telnet bedienen kann? :wink: Nun ja, ansonsten falls es unbedingt WConio sein muss... die Befehle sind dieselben wie in Pascal. Allerdings wird die Programmierung dadurch nicht wirklich leichter, da so ein INterface nicht an die curses heranreichen kann...

Milan
Gast

gibt es denn noch andere alternativen zu WConio? Wenn nicht werde ich versuchen mein Projekt unter Unix mit curses zu realisieren....

Gruß Hanman
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Gast

Willst du die Eingabe über eine grafisch orientierte (Windows like Fenster), oder über eine Textorientierte (Terminal like) Oberfläche eingeben?

Gruss wuf :wink:
Take it easy Mates!
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Heyho :)
blöder IE, löscht die Cookies immer nach jedem Runterfahren und ich vergess mich wieer einzuloggen...
Mir ist es mittlerweile eigentlich recht egal wie das von statten gehen soll. Ich habe mir jetzt mal Tkinter angeschaut und auch festgestellt das, das dann recht komplex werden würde. Ich möchte nur einen kleinen Contentmanger für meine Homepage machen und da würde mir der SHell eben vollkommen reichen und da ich noch totaler Anfänger bin würde ich auch ein Shell prog bevorzugen, weil ich denke das sowas einfacher zu verwirklichen wäre...

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

warum machst Du es dann nicht gleich mit einem Webinterface, dann kannst du die Eingabefelder der Forumulare auch mit Texten vorbelegen.


Gruß

Dookie
JPohlmann
User
Beiträge: 7
Registriert: Freitag 2. April 2004, 22:52

Content-Management per Python-Programm, das scheint mir auch recht umständlich. Da liegen doch PHP oder CGI weitaus näher und Daten lassen sich, wie Dookie schon richtig sagt, leicht per Formular verändern.
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Natürlich könnte ich das auch einfach per CGI erledigen, PHP wäre auch kein Problem, doch ich habe angefangen Python zu lernen um kleinere Programme endlich selber schreiben zu können und darum wollte ich eben aus dem CMS keine CGI Anwendung machen, aber ich sehe das das so wohl am einfachsten geht und üben kann ich da ja auch genug!

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Hanman

Hier ist etwas Code zum herumspielen, welcher Tkinter benutzt,
sollte unter Windows und Linux laufen.

Die Anwendung besitzt ein Eingabefeld in welchem du Änderungen
vornehmen kannst und mit aktivieren der Entertaste wird diese
Änderung ausgegeben.

Code: Alles auswählen


#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from Tkinter import *

def Beenden():
	# Hauptfenster schliessen
    sys.exit(0)

def Ausgabe(event):
	# Überträgt die Eingabe an das Ausgabelabel
	lblausgabe["text"] = 'Ausgabe: ' + eingabe.get()
	# Setzt eine Variable mit dem Eingabewert für weitere Verwendung
	myentry = eingabe.get()
	print myentry

#*****************
#* Programmstart *
#*****************
# Erzeugt ein Hauptfenster
root = Tk()
root.title('Eingabe')
xpos   = 10
ypos   = 10
width  = 400
height = 100
root.wm_geometry("%dx%d+%d+%d" % (width,height,xpos,ypos))

# Zeichensatz für das Ausgabelabel
font = ('Helvetica',20,'bold')

# Variablen
eingabe    = StringVar()
eingabe.set('Hans Mustermann')
entrylabel = 'Ihr Name: '
myentry    = ''

# Rahmen für die Aufnahme der Eingabebezeichnung & Eingabefeld
frame = Frame(root)
frame.pack()

# Label für Eingabebezeichnung
lbleingabe = Label(frame,text=entrylabel)
lbleingabe.pack(side='left')

# Eingabefeld
entry = Entry(frame,textvariable=eingabe,bg='white')
entry.pack(side='left')

# Die Änderung im Eingabefeld wird mit der Enter-Taste ausgegeben
entry.bind("<Return>",Ausgabe)

# Ausgabelabel für den Eingabewert
lblausgabe = Label(root,
			foreground ='blue',
			text       = 'Ausgabe: ' + eingabe.get(),
			font       = font,
			)
lblausgabe.pack(pady = 10)

# Schaltfläche für Beenden
bende = Button(root, text = "Ende", command = Beenden)
bende.pack(side= 'bottom')

root.mainloop()
Sorry! Ich habe leider keine Erfahrung mit PHP und CGI.

Gruss wuf :wink:
Take it easy Mates!
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Dankeschön der Code hat mir jetzt wirklich weitergeholfen. Ist echtnett von dir das du dir soviel Zeit genommen hast! :)

Gruß Hanman
'Ich liebe es wenn ein Plan funktioniert'
Gast

So jetzt stellt sich mir ein neues Problem :
Ich möchte den Inhalt eines ganzen Textfensters in einer Datei speichern. Dazu habe ich folgenen Code geschrieben :

Code: Alles auswählen

# -*- coding: cp1252 -*-
from Tkinter import *

def newseingabe():
    nspeichern = Button(root, text="News speichern")
    nspeichern.pack(side=TOP)
    nspeichern.bind("<Button-1>", newsschreiben())
    font = ("Arial",10,"bold") #Fon   #Varialen
    frame = Frame(root) #Rahmen für eingabe
    frame.pack()
    lbleingabe = Label(frame) #Label der Eingabe
    lbleingabe.pack(side='left')
    feld =Text(root,width=200, height=180,bg="white") #Eingabefeld
    feld.pack(side="left")
    ausgabe = feld.get(1.0,END)
    oeffnen = open("news.txt", "w")
    oeffnen.write(feld.get(1.0,END))
    oeffnen.close()

    
def newsschreiben() :
    print 'blah'
    #ausgabe = feld.get(1.0,END)
    #oeffnen = open("news.txt", "
    #oeffnen.write(feld.get(1.0,END))
    #oeffnen.close()


#Programmstart
root = Tk()   #Hauptfenster
eingabe = StringVar()
root.title("CMS")
xpos = 10
ypos = 10
width = 600
height = 600
root.wm_geometry("%dx%d+%d+%d" % (width,height,xpos,ypos))

menubar = Menu(root)  #Menu
newsmenu=Menu(menubar)
newsmenu.add_command(label="Hinzufuegen", command=newseingabe)
root.config(menu=newsmenu)
frame=Frame(root,width=600)
frame.pack()
root.mainloop() #LOOP
In der Datei news.txt werden aber nur 2 Breaks gepsiechert. Woran kann das líegen? Kann ich sowas vielleicht nur mit savefile() machen?

Gruß Hanman[/code]
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Das "feld" enthält zu dem Zeitpunkt, an dem du Specherst noch gar keine Eingaben.
Du musst den Aufbau der GUI und die Aktionen die dann ausgeführt werden trennen. Für die Aktionen definiertst Du Funktionen oder Methoden, die dann an die Buttons und Entrywidgets mit "bind()" gebunden werden. Sobald dann der Anwender einen Button drückt oder eine Eingabe im Entry macht wird die Funktion ausgeführt. Bei Tkinter sind schon ein paar schöne Beispiele dabei, schau dir einfach mal den Sourcecode an von den Teilen, die für dich interessant sind.


Gruß

Dookie
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Hanman

Hier ist dein leicht frisierter Code zum ausprobieren.
Jetzt sollte etwas in die Datei 'news.txt' geschrieben
werden, sofern Text ins Textfeld eingegeben wurde.
Wie du siehst braucht der Button nicht eine Bindung
<'Button-1'>, da der Button eine option 'command' besitzt
um bei seiner Aktivierung eine Funktion aufzurufen.
Das Objekt 'feld' für das Texteingabefeld muss mit der
Anweisung 'global' nach aussen bekannt gegeben werden,
da es in einer Funktion erzeugt wird. So hat auch die
Funktion 'newschreiben' Kenntnis über die Existenz des
Textfeldobjektes 'feld' die sie braucht um den Text aus
diesem Objekt zu lesen.

Code: Alles auswählen

# -*- coding: cp1252 -*-
from Tkinter import *

def newseingabe():
	global feld
	nspeichern = Button(root, text="News speichern",command=newsschreiben)
	nspeichern.pack(side=TOP)

	font = ("Arial",10,"bold") #Fon   #Varialen
	frame = Frame(root) #Rahmen für eingabe
	frame.pack()

	lbleingabe = Label(frame) #Label der Eingabe
	lbleingabe.pack(side='left')

	feld =Text(root,width=200, height=180,bg="white") #Eingabefeld
	feld.pack(side="left")
	feld.delete(0.0,END)

def newsschreiben() :
	print 'Text wird in Datei geschrieben'
	ausgabe = feld.get(1.0,END)
	oeffnen = open("news.txt","w")
	oeffnen.write(feld.get(1.0,END))
	oeffnen.close()

# Programmstart
root = Tk()    #Hauptfenster
eingabe = StringVar()
root.title("CMS")
xpos = 10
ypos = 10
width = 600
height = 600
root.wm_geometry("%dx%d+%d+%d" % (width,height,xpos,ypos))

menubar = Menu(root)  #Menu
newsmenu=Menu(menubar)
newsmenu.add_command(label="Hinzufuegen", command=newseingabe)
root.config(menu=newsmenu)
frame=Frame(root,width=600)
frame.pack()

root.mainloop() #LOOP
Gruss wuf :wink:
Take it easy Mates!
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Hallo,
ist wirklich nett von euch das ihr euch am Sonntag Abend soviel Zeit für mich nehmt! Danke. Besonders dein Code wuf hat mir weitergeholfen!
Ich hab jetzt das ganze nochmal geschrieben und alles beachtet was ihr beiden mir empfohlen habt :

Code: Alles auswählen

from Tkinter import *
from tkFileDialog import *

class CMS :
    
    def __init__(self) :
         
         #Fenster erstllen
         self.root = Tk()
         self.fenster = Frame
         self.root.title("CMS")
         self.xpos = 10
         self.ypos = 10
         self.width = 600
         self.height = 600
         self.root.wm_geometry("%dx%d+%d+%d" % (self.width,self.height,self.xpos,self.ypos))
         #Menu erstellen
         self.menubar = Menu(self.root)
         self.menubar.add_command(label="eyy", command=self.textf)
         self.newsmenu=Menu(self.menubar)
         self.root.config(menu=self.menubar)
         self.frame=Frame(self.root,width=600)
         self.frame.pack()
         self.root.mainloop()

    def textf(self):
        self.savebutt = Button(self.root, text="News speichern", command=self.savenews)
        self.savebutt.pack(side="top")
        self.frame = Frame(self.root)
        self.txtlabel = Label(self.frame)
        self.txtlabel.pack(side="left")
        global feld
        feld = Text(self.root, width=200, height=180,bg="white")
        feld.pack(side="left")
        feld.delete(0.0,END)
        
        
    def savenews(self):
        oeffnen = open("news.txt", "w")
        holen = feld.get(1.0,END)
        oeffnen.write(holen)
        oeffnen.close() 
        
        

CMS()
Jetzt funktioniert zum Glück alles bestens. Ich werde jetzt erstmal die ganzen News durch XML gliedern, der Möglichkeiten XML mit Python zu verarbeiten sind ja großartig!

Gruß Hanman[/code]
'Ich liebe es wenn ein Plan funktioniert'
Antworten