Benutzermenue OHNE graphische Umgebung

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
Benutzeravatar
Systemcrasher
User
Beiträge: 3
Registriert: Mittwoch 30. Dezember 2020, 13:41

Hallo Leute,

erstmal vielen Dank an die Forenadministratoren, sie haben praktisch in Sekundenschnelle meine Unvorsichtigkeit mit meinem Benutzernamen geändert.

Nun das Problem (ich bin Anfänger, habe gerade erst einen Online Python-Anfängerkurs beendet):

Ich schreibe gerade 2 simple Programme, die beide auch schon funktionieren (Dank Hilfe meines Sohnes).

Für das eine (Knobelspiel) habe ich recht schnell eine graphische Lösung (Tkinter) gefunden.
Für das andere möchte ich jedoch ohne graphische Umgebung auskommen. Ich dachte an ein reines Konsolenmenue , wie es auch beim MidnightCommander zu genießen ist. Und bisher nix passendes gefunden (vielleicht auch die falschen Schlüsselwörter verwendet).

Hintergrund: ich möchte einen alten Laptop (letztes Jahrtausend) als Webradio weiterverwenden. Ein neues Webradio ist im Prinzip auch nichts anderes und der Lappi ist äußerst sparsam im Stromverbrauch.
Dazu setzte ich diesen mit einem rudimenären Linux (ohne X) auf, jedoch mit Python.
Prinzipiell geht das auch über ein script, aber ich möchte später bequem verschiedene Sender auswählen können, ohne immer erst das script zu editieren.
Und dafür brauche ich halt eine Lösung, die mich über Touchpad oder Cursortasten die Sender auswählen läßt.

Kennt da jemand eine Lösung / einen passenden Link?
Also kein fertiges Programm, sondern idealerweise sowas wie Tkinter, nur halt für die Konsole.

Vielen Dank für die Hilfe. :)
Euch allen ein glücklicheres 2021, ohne Lockdown und ohne anderen Einschränkungen !
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das Modul das du suchst heißt ncurses
Benutzeravatar
Systemcrasher
User
Beiträge: 3
Registriert: Mittwoch 30. Dezember 2020, 13:41

Vielen Dank :)
Euch allen ein glücklicheres 2021, ohne Lockdown und ohne anderen Einschränkungen !
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Etwas ”higher level” wären `urwid` oder `npyscreen`.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Systemcrasher
User
Beiträge: 3
Registriert: Mittwoch 30. Dezember 2020, 13:41

Habe jetzt mal ein bischen rumgesucht.

Zu 'ncurses' habe ich das aktuellste Handbuch in deutsch hier gefunden: https://de.wikibooks.org/wiki/Python_un ... ux:_Curses

Letzte Änderung: 2014. D.h., Das gilt nur für Python 2.x, aber für Python 3.x sicher nicht ohne Weiteres. Ich hoffe, es ist im Wesentlichen nicht mehr als das Beachten von Groß-/ und Kleinschreibung. Der Link verweist auf ein als pdf vorliegendes Handbuch für nurses, aber das ist auch von 2014.

Zu `urwid` oder `npyscreen` (Dank auch an blackjack) habe ich bisher nur englichsprachige Manuals gefunden, für den Einstieg ist mir deutsch aber lieber.
Euch allen ein glücklicheres 2021, ohne Lockdown und ohne anderen Einschränkungen !
Benutzeravatar
snafu
User
Beiträge: 6873
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

__blackjack__ hat geschrieben: Mittwoch 30. Dezember 2020, 16:03 Etwas ”higher level” wären `urwid` oder `npyscreen`.
Ich weiß, der Thread ist von 2020, aber ich bin gerade im Thema TUI-Entwicklung unter Windows.

Was ich anmerken wollte: Urwid und npyscreen verfolgen unterschiedliche Ansätze. Urwid ist populärer und ereignisorientiert (event-driven), wie man es klassischerweise von der GUI-Programmierung kennt. npyscreen kann unter anderem sehr gut Benutzerdaten abfragen mittels Formularen und macht das mit mehr "Magie" unter der Haube. Es hat ziemlich viele Widgets eingebaut. Bei Datumsabfragen geht zB ein echt gut gemachter Kalender im Terminal auf, der automatisch auf dem aktuellen Datum steht, aber auch zwischen Monaten bzw Jahren wechseln kann und sowas.

Noch ein Unterschied für Windows-Benutzer: urwid läuft nicht unter Windows, npyscreen hingegen schon. Letzteres erfordert "nur" eine funktionsfähige Curses-API, während urwid von weiteren Linux-spezifischen Modulen abhängt. Ein lauffähiges curses bekommt man nach meiner Erfahrung am besten mit dem externen Modul windows-curses zustande. Das fungiert dann als (nicht ganz vollwertiger) Ersatz zum Linux-Pendant. Nicht implementierte Features werden dabei wohl einfach ignoriert. Jedenfalls erst das zu installieren und dann npyscreen drüberknallen läuft bei mir bisher ganz gut.

Mal etwas Code aus der Einführung:

Code: Alles auswählen

#!/usr/bin/env python
# encoding: utf-8

import npyscreen
class TestApp(npyscreen.NPSApp):
    def main(self):
        # These lines create the form and populate it with widgets.
        # A fairly complex screen in only 8 or so lines of code - a line for each control.
        F  = npyscreen.Form(name = "Welcome to Npyscreen",)
        t  = F.add(npyscreen.TitleText, name = "Text:",)
        fn = F.add(npyscreen.TitleFilename, name = "Filename:")
        fn2 = F.add(npyscreen.TitleFilenameCombo, name="Filename2:")
        dt = F.add(npyscreen.TitleDateCombo, name = "Date:")
        s  = F.add(npyscreen.TitleSlider, out_of=12, name = "Slider")
        ml = F.add(npyscreen.MultiLineEdit,
               value = """try typing here!\nMutiline text, press ^R to reformat.\n""",
               max_height=5, rely=9)
        ms = F.add(npyscreen.TitleSelectOne, max_height=4, value = [1,], name="Pick One",
                values = ["Option1","Option2","Option3"], scroll_exit=True)
        ms2= F.add(npyscreen.TitleMultiSelect, max_height =-2, value = [1,], name="Pick Several",
                values = ["Option1","Option2","Option3"], scroll_exit=True)

        # This lets the user interact with the Form.
        F.edit()

        print(ms.get_selected_objects())

if __name__ == "__main__":
    App = TestApp()
    App.run()
https://npyscreen.readthedocs.io/introd ... ample-code

Was man aber auch sagen muss: npyscreen ist über die Jahre gewachsen und wird AFAIK nicht mehr wirklich weiterentwickelt. Es läuft unter Python 3.10 ohne Probleme, aber ist halt nicht gerade "state of the art". Für mich persönlich ist das okay und es ist mir wesentlich lieber als gegen "rohes" Curses programmieren zu müssen, denn das ist nicht wirklich schön auf Dauer.
Benutzeravatar
snafu
User
Beiträge: 6873
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Nach dem zweiten Tag Einarbeitung: Schon echt hart, dass man irgendwie für alles eine eigene Klasse benötigt. Der Autor scheint sehr viel mit Java unterwegs zu sein. Und man muss sehr viel über die Basisklassen wissen, damit das Framework halbwegs tut, was man will. Es sind an vielen Ecken durchaus fragwürdige Design-Entscheidungen getroffen worden. Ehrlich gesagt hoffe ich, dass urwid bald unter Windows-Systemen funktioniert. Dieses npyscreen ist auf dem zweiten Blick leider nicht so das Gelbe vom Ei...
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Auf deinen Hinweis hin, habe ich mich auch näher mit den beiden beschäftigt und genau dieselbe Erfahrung gemacht. npyscreen sieht vielversprechend aus, ist dann aber doch recht hakelig in der Umsetzung. Ich hatte da ebenfalls so ein "Java-Gefühl".
Antworten