Seite 1 von 1

Benutzermenue OHNE graphische Umgebung

Verfasst: Mittwoch 30. Dezember 2020, 14:21
von Systemcrasher
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. :)

Re: Benutzermenue OHNE graphische Umgebung

Verfasst: Mittwoch 30. Dezember 2020, 14:41
von __deets__
Das Modul das du suchst heißt ncurses

Re: Benutzermenue OHNE graphische Umgebung

Verfasst: Mittwoch 30. Dezember 2020, 15:25
von Systemcrasher
Vielen Dank :)

Re: Benutzermenue OHNE graphische Umgebung

Verfasst: Mittwoch 30. Dezember 2020, 16:03
von __blackjack__
Etwas ”higher level” wären `urwid` oder `npyscreen`.

Re: Benutzermenue OHNE graphische Umgebung

Verfasst: Donnerstag 31. Dezember 2020, 14:43
von Systemcrasher
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.

Re: Benutzermenue OHNE graphische Umgebung

Verfasst: Montag 18. April 2022, 11:10
von snafu
__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.

Re: Benutzermenue OHNE graphische Umgebung

Verfasst: Dienstag 19. April 2022, 16:57
von snafu
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...

Re: Benutzermenue OHNE graphische Umgebung

Verfasst: Mittwoch 20. April 2022, 10:53
von einfachTobi
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".