[Python] console-GUI maken: nCurses?

Pagina: 1
Acties:

  • milouny
  • Registratie: Februari 2000
  • Laatst online: 23-05 22:39
Ik ben begonnen met het leren van Python, en het bevalt.

Ik wil graag een GUI ontwerpen voor de console, dus zo'n ding als bijvoorbeeld cfdisk en giFTcurs hebben.

het leuke aan giFTcurs (zie screenshot) is dat het leuke tabelletjes heeft, opgebouwd uit lijntjes, hoekjes, etcetera. Dat wil ik ook.
Eerst zocht ik naar high-level toolkits boven op curses, om GUI-elementen te maken , maar die kon ik niet vinden (De toolkits gereferenced in de howto waren verdwenen of ontoereikend). Dus ik wilde zelf wat schrijven.

Nu is giFTcurs waarschijnlijk geschreven in C (of een andere niet-Python), dat snap ik...

Maar hoe maak ik die hoekjes?

Ik heb een Python curses howto gelezen. Als ik met stdscr.addstr() of stdscr.addch() een karakter als ascii-karakter 24 of 18 toevoeg, wordt het weergegeven als ^X, ^R, etcetera. (NB: toevoegen met addstr() door ik natuurlijk door string te maken met '%c' % 24).

als ik de karakters gewoon print (zonder ncurses) worden ze wel mooie figuurtjes:
code:
1
print '%c %c %c %c %c' % (18, 19, 20, 21, 22)



Het punt is dus eigenlijk: Waarom worden die hoekjes in curses omgezet naar ^CHARACTERs? Hoe voorkom ik dat? Of is het inherent aan de python curses module? Lijkt me niet, toch?

Of nog beter: Hebben jullie tips over het maken van zo'n GUI in Python? Tips over een bestaande toolkit?


Ik programmeer op Debian GNU/Linux, en ik gebruik xterm. (Hier zou het natuurlijk mee te maken kunnen hebben, maar: giFTcurs doet 't wel!)

[ Voor 3% gewijzigd door milouny op 22-07-2004 01:59 ]

AMD 386 DX/DXL 40MHz - 20MB 32-pins edo RAM - 100MB Conner en 160MB Conner Harddisks - OAK Otivga VGA 1MB


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23-05 18:13
Tja, curses stuurt je terminal helemaal op z'n eigen manier aan. Ik heb niet genoeg ervaring met of kennis van curses om je uit te kunnen leggen hoe dat precies werkt, maar het hele punt van curses gebruiken is ook juist dat je niet op zo'n laag nivo hoeft te werken maar de curses API kunt gebruiken om op hoog nivo je terminal aan te sturen.

Als het je doel is om rechthoekige vensters te maken, zoals je in je screenshot kan zien, dan moet je gewoon de curses functies daarvoor gebruiken. Die worden ook in de tutorial die je al noemde gedocumenteerd: Curses Programming with Pyhon: 3. Windows and Pads

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 15:13

Kees

Serveradmin / BOFH / DoC
Met deze table kun je zien welke chars je moet gebruiken voor 'mooie' gui's.

In principe kan je zelfs iets dergelijks in bash maken :)

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Kees schreef op 22 juli 2004 @ 04:26:
Met deze table kun je zien welke chars je moet gebruiken voor 'mooie' gui's.

In principe kan je zelfs iets dergelijks in bash maken :)
Ik denk dat de moeilijkheid zit in het verenigen van die symbolen met dat curses gedoe. ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • milouny
  • Registratie: Februari 2000
  • Laatst online: 23-05 22:39
Soultaker schreef op 22 juli 2004 @ 03:35:
Als het je doel is om rechthoekige vensters te maken, zoals je in je screenshot kan zien, dan moet je gewoon de curses functies daarvoor gebruiken. Die worden ook in de tutorial die je al noemde gedocumenteerd: Curses Programming with Pyhon: 3. Windows and Pads
Ja, dan kan ik 'windows' maken, maar dat is toch alleen handig omdat je dingen kunt laten overlappen, en gemakkelijk verplaatsen? Dat zie je toch niet per se? Het heeft toch geen border?
Kees schreef op 22 juli 2004 @ 04:26:
Met deze table kun je zien welke chars je moet gebruiken voor 'mooie' gui's.

In principe kan je zelfs iets dergelijks in bash maken :)
Bedankt voor de tabel, maar hoe teken ik de karakters 179 tot 218 met ncurses in Python?
Grijze Vos schreef op 22 juli 2004 @ 04:55:
[...]

Ik denk dat de moeilijkheid zit in het verenigen van die symbolen met dat curses gedoe. ;)
Precies!

AMD 386 DX/DXL 40MHz - 20MB 32-pins edo RAM - 100MB Conner en 160MB Conner Harddisks - OAK Otivga VGA 1MB


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23-05 18:13
milouny schreef op 22 juli 2004 @ 10:38:
Ja, dan kan ik 'windows' maken, maar dat is toch alleen handig omdat je dingen kunt laten overlappen, en gemakkelijk verplaatsen? Dat zie je toch niet per se? Het heeft toch geen border?
Je kunt zo'n window wel een border geven door de border-methode ervan aan te roepen. Mijn punt dus eigenlijk dat je niet zelf border hoeft te tekenen als je alleen maar rechthoekige vensters met borders wilt hebben.

  • milouny
  • Registratie: Februari 2000
  • Laatst online: 23-05 22:39
Ok, dat wist ik niet. Dat is wel leuk.

Maar kijk eens naar deze screenshot: Die heeft ook gaatjes in de rand, waar de titel van dat vak staat. En deze heeft ook nog een klein groen balletje aan de rechterkant dat aangeeft dat er gescrolld kan worden.

Zo'n rand is dus leuk (hoewel ik nog niet goed door heb hoe die werkt - een voorbeeld van het gebruik ervan, of een howto ofzo zou erg leuk zijn), maar ik wil wat meer kunnen met die GUI.

Een Python-toolkit die het automatisch doet zou natuurlijk ook goed zijn... Iemand een idee?

AMD 386 DX/DXL 40MHz - 20MB 32-pins edo RAM - 100MB Conner en 160MB Conner Harddisks - OAK Otivga VGA 1MB

Pagina: 1