• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Welche Programmiersprache nach JavaScript und PHP?

musv

Bekannter NGBler

Registriert
15 Juli 2013
Beiträge
3.453
Ort
/dev/null
Das sind Fake News, Fenster funktionieren unter Linux genau so wie unter Windoze und sehen auch nicht irgendwie anders aus, als die der anderen Anwendungen.

Hab das dazu gefunden.
https://forum.golem.de/kommentare/s...-unter-linux/111410,4879717,4879717,read.html

Das genannte Eto Forms scheint wohl ein GTK-Wrapper für .NET-Core zu sein.

Die restlichen Antworten des Threads drücken jedoch auch eine gewisse Unsicherheit aus.

Meine Ideen so far:
Ich könnte eine Kommandozeilen-Wetterapp machen, wo man quasi die PLZ als Parameter übergibt
Ist 'ne hübsche Übung. Die Daten zu besorgen ist eher einfach. Da hätte ich aber gleich eine sinnvollere Aufgabe:
In Kodi gab's früher mal ein Wetter-Addon, was Weather Underground als Basis nutzte. Leider wurde Wunderground dann vom Weather Channel / IBM gekauft, die dann im Februar 2019 den API-Dienst eingestellt haben.

Der Nachfolger ist das Weatherbit.io-Addon, was Weatherbit.io für die Wetterdaten und Openweathermap für die Kartendaten nutzt. Openweathermap will bei mir in Kodi nicht so recht funktionieren. Und die Wetterdaten von Weatherbit erscheinen nur, wenn man direkt das Wetter im Kodimenü anwählt. Die 36-Stundenanschicht klappt auch nicht.

Wunderground hat das Wetter schon beim Start geladen und in der Hauptansicht angezeigt Das lief wesentlich runder. Genial wäre, wenn Weatherbit.io denselben Funktionsumfang und dasselbe Verhalten bekommen könnte wie Wunderground.

Diese Addons für Kodi sind in Python geschrieben. Den Guide gibt's hier. Da könntest du was sinnvolles tun, was Dich und die Welt weiterbringt.

Alternativ ein Wikipedia-Reader, bei dem ich die App starte und dann nach dem Suchbegriff gefragt werde. Wenn dieser eingegeben wurde, dann wird mir der Hauptartikel vom Suchbegriff angezeigt. Das wäre ein bisschen was mit Web, Filtern von HTML und sowas.
Dazu müsstest du einen HTML-Renderer schreiben.

Die eigentliche Aufgabe in Bash:
Code:
#!/bin/bash

lynx -dump https://de.wikipedia.org/wiki/$1 | less
Kann man natürlich noch optimieren (Ähnlichkeitssuche). Wirklich herausfordernd und sinnvoll ist das aber nicht.

Ein Softwareupdater, der die aktuellste Version von einer bestimmten Software herunterlädt und installiert.
Paketmanager? Gibt's sowas nicht für Mac?

Google Suche auf der Kommandozeile, z.B. die ersten 10 Ergebnisse mit Link und Überschrift von Google.
Saxparser. Ist im Grunde genommen dieselbe Aufgabe wie bei Deiner Wetterabfrage.

Eine Sicherheitslücke für eine Webapplikation finden und ein Exploit schreiben.
Da musst du Dich vorher noch mit wesentlich mehr Theorie auseinandersetzen. Da wären auch noch ganz andere Wissensgebiete notwedig, z.B. SQL-Injection

TV-Programm auf der Kommandozeile (Gibt's da ne API?)
Sehr gute Idee. Eines der begehrtesten Features bei TVBrowser ist eine Client-Server-Architektur, damit man das TV-Programm nicht mit jedem Endgerät einzeln runterladen muss. Leider wurde dieser Wunsch jedesmal konsequent abgelehnt, da die Daten nicht zwischengespeichert werden dürfen. Allerdings ist TVBrowser in Java geschrieben.

Genial wäre hier eine Portierung nach C++ mit Serverkomponente und Client auf QT-Basis für die gängigen Desktop-OS. Allerdings denke ich, dass diese Aufgabe eher mehrere Mannjahre an Entwicklung benötigt.

Pizza per Kommandozeile bestellen
Cool.

Musikplayer mit GUI (Mit Playlist, Start, Stop, Pause, Volume)
Gibt's das nicht schon in Massen (CMUS, Amarok, Clementine, Foobar2000, Rhythmbox, Banshee, Winamp, Audacious, MPD)?


Spotify-Downloader (wenn das technisch möglich ist)
Irgendwo gab's da 3 Bashzeilen. Technisch funktioniert das so, dass du das Audiodevice abgreifst und die Daten dann wieder in ein Musikformat (flac, ogg, aac) kodierst.

Youtube-Playlist-Downloader
Wozu? Ansonsten: Siehe Wetterdownloader. Ist auch wieder ein Sax-Parser.
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
Alternativ könntest du in einem bestehenden Projekt mitarbeiten. Durch Code lesen lernt man auch ziemlich viel.
Wenn du schon PHP und JS gemacht hast könntest du auch ein Django-Projekt machen. Das ist vergleichbar zu Laravel, aber für Python. Dadurch, dass Frameworks Opinionated sind lernst du auch gleich einiges über Software-Entwicklung.
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #23
Ich könnte eine Kommandozeilen-Wetterapp machen, wo man quasi die PLZ als Parameter übergibt
Ist 'ne hübsche Übung. Die Daten zu besorgen ist eher einfach. Da hätte ich aber gleich eine sinnvollere Aufgabe:
In Kodi gab's früher mal ein Wetter-Addon, was Weather Underground als Basis nutzte. Leider wurde Wunderground dann vom Weather Channel / IBM gekauft, die dann im Februar 2019 den API-Dienst eingestellt haben.

Der Nachfolger ist das Weatherbit.io-Addon, was Weatherbit.io für die Wetterdaten und Openweathermap für die Kartendaten nutzt. Openweathermap will bei mir in Kodi nicht so recht funktionieren. Und die Wetterdaten von Weatherbit erscheinen nur, wenn man direkt das Wetter im Kodimenü anwählt. Die 36-Stundenanschicht klappt auch nicht.

Wunderground hat das Wetter schon beim Start geladen und in der Hauptansicht angezeigt Das lief wesentlich runder. Genial wäre, wenn Weatherbit.io denselben Funktionsumfang und dasselbe Verhalten bekommen könnte wie Wunderground.

Erst mal ein Test zur Übung:

[src=python]import requests
import json

key = "e53efde4e3bfad0e9f15634b2a326983" # API KEY eintragen
zip = str(input("PLZ eingeben: "))
url = "https://api.openweathermap.org/data/2.5/weather?zip=" + zip + ",DE&units=metric&appid=" + key

data = requests.get(url)
json = json.loads(data.text)

print("Stadt: " + str(json["name"]) + "\nTemperatur: " + str(json["main"]["temp"]))
if json["main"]["temp"] > 20:
print("Oh, es ist warm")
else:
print("Hmm, die Temperatur liegt noch unter 20 Celsius")
[/src]

Bin das casten von Variablen nicht so gewohnt, das hat mich schon ein bisschen hier geärgert, hab's aber rausgefunden. Und an "import" muss ich mich gewöhnen. Kennt man von JS/PHP eigentlich gar nicht. Sonderzeichen sind auch nicht erlaubt bzw. das muss man auch irgendwie konfigurieren. :/
 
Zuletzt bearbeitet:

musv

Bekannter NGBler

Registriert
15 Juli 2013
Beiträge
3.453
Ort
/dev/null
Ich hatte mal etwas Lust zum Coden und hab Dein Beispiel hergenommen:

[src=python]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import argparse
import io
import json
import pycurl

VERSION="0.1"

class Wettertest(object):
"""Klasse"""
__key_api = "e53efde4e3bfad0e9f15634b2a326983"
__zip = None
__url_owm = "https://api.openweathermap.org/data/2.5/weather?zip="
__url_args = ",DE&units=metric&appid="
__doc = None

def __init__(self, plz):
self.__download(plz)

def __download(self, plz):
url_full = self.__url_owm + plz + self.__url_args + self.__key_api
c = pycurl.Curl()
response_body = io.BytesIO()
response_header = io.BytesIO()
try:
c.setopt(pycurl.URL, url_full)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.VERBOSE, 0)
c.setopt(pycurl.HEADER, 0)
c.setopt(pycurl.HEADERFUNCTION, response_header.write)
c.setopt(pycurl.WRITEFUNCTION, response_body.write)
c.perform()
c.close()
self.__doc = response_body.getvalue().decode('UTF-8')
except pycurl.error:
print("PyCurl-Fehler: {} - {}".format(c.errstr(), url_full))

def print_temperatur(self):
try:
jdoc = json.loads(self.__doc)
print("Stadt:\t\t{}\nTemperatur:\t{}°C".format(jdoc["name"], jdoc["main"]["temp"]))
print("Ist ziemlich warm." if int(jdoc["main"]["temp"]) > 20 else "Ist eher kühl.")
except KeyError:
print("Fehlercode: {}\nMeldung: {}".format(jdoc["cod"], jdoc["message"]))
except:
print("Fehler")


if __name__ == '__main__':
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS, help="Zeige diese Hilfe und beende das Programm")
parser.add_argument('-v', '--version', action="version", version="%(prog)s-{}".format(VERSION), help='Zeige die Programmversion')
parser.add_argument('plz', help="Postleitzahl")
args = parser.parse_args()
wt = Wettertest(args.plz)
wt.print_temperatur()



[/src]

Ein paar Erklärungen dazu:
  • Die Kommentarzeile: -*-- coding: utf-8 -*- veranlasst Python zur Interpretation des Quellcodes in UTF-8-Kodierung.
  • if __name_ ...: Damit kannst du jeden Codeschnipsel sowohl als Standaloneprogramm als auch als Modul zum Importieren in andere Programme nutzen. __name__ ist der Name der aufgerufenen Applikation
  • Mit argparse hast du gleich eine Lib für Programmoptionen und die Hilfeausgabe
  • Klassenattribute mit __ sind private, mit _ protected
  • Statt requests hab ich PyCurl verwendet. PyCurl bietet Dir mehr Möglichkeiten als Requests, u.a. Postfelder, Login + Passwort, Kerberos- und Proxyauthentifizierung, Auslesen des HTTP-Headers
  • Sowohl die URL- als auch das Parsen des JSON setzt man besser in Try-Catch-Blöcke.
  • In Python gibt's keine richtigen ternären Operator. Aber man kann das if-else in eine Zeile packen.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
[src=python]#!/usr/bin/python3
# -*- coding: utf-8 -*-[/src]

Edit: Okay, hat @musv auch schon gepostet. :) - War vor meinem Edit noch nicht da.

Ich habe auch eine anspruchsvolle Aufgabe, bei der man präzise arbeiten und vorgehen muß. Man könnte dafür zum Beispiel Python heran nehmen. Bzw. würde es sich dafür besonders eignen.

Aktuell hat das Ursprungsprojekt etwas Staub angesetzt und ich bin gerade wieder dabei es auszumotten... Was darin vorkommt bzw. Hauptkern ist, die Arbeit mit Dateien, Strings/Lists/Dictionaries und Datendaten, die gezielt interpretiert und zu einer weiteren Auswertung genutzt werden, in bestimmten Schemas, basierend auf unterschiedlichen, zum Teil ähnlichen, Inputs.

--- [2019-04-23 18:10 CEST] Automatisch zusammengeführter Beitrag ---

@musv:

Guter Post... aber etwas fehlt noch beim Exception Handling:
[src=python]
try:
pass
except KeyError:
print("Fehlercode: {}\nMeldung: {}".format(jdoc["cod"], jdoc["message"]))
except Exception as error:
print("Unbehandelter Fehler:")
print(error)[/src]
 
Zuletzt bearbeitet:

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #26
Kannst du mir diesen Teil bitte genauer erklären:

[src=python]
if __name__ == '__main__':
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS, help="Zeige diese Hilfe und beende das Programm")
parser.add_argument('-v', '--version', action="version", version="%(prog)s-{}".format(VERSION), help='Zeige die Programmversion')
parser.add_argument('plz', help="Postleitzahl")
args = parser.parse_args()[/src]

Und das hier bitte:
if __name_ ...: Damit kannst du jeden Codeschnipsel sowohl als Standaloneprogramm als auch als Modul zum Importieren in andere Programme nutzen. __name__ ist der Name der aufgerufenen Applikation

Alles andere habe ich verstanden. Ungewöhnlich ist das Fehlen der geschweiften Klammern, etwas verwirrend, aber spart natürlich auch Schreibarbeit. :uglyngb:
 

musv

Bekannter NGBler

Registriert
15 Juli 2013
Beiträge
3.453
Ort
/dev/null
Code:
if __name__ == '__main__':

Wenn du wie hier im Beispiel die Datei ausführbar machst und startest, dann hat die Environmentvariable __name__ den Wert __main__. Entsprechend wir der nachfolgende Code ausgeführt. Bindest du die Datei über "import wettertest" in ein anderes Projekt ein, dann hat __name__ einen anderen Namen und der nachfolgende Code wird nicht ausgeführt. Die Klasse darin und sämtliche Funktionen kannst du aber in dem anderen Projekt verwenden.

Diese Geschichte ist in mehreren Punkten ziemlich praktisch. Du kannst damit einzelne Module debuggen, ohne das ganze Projekt betrachten zu müssen. Und wie bereits genannt, kannst du damit den Code sowohl als Standaloneprogramm als auch als Modul in anderen Projekten verwenden.

Der Argparser sollte nicht sonderlich schwierig zu verstehen sein. Da find ich in Python klasse, dass strikt zwischen optionalen Argumenten (Kurznotation mit 1x -, Langnotation mit 2x-- und = usw.) unterschieden wird. Siehe dazu auch hier.
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #28
@musv: Und woher kommt __main__? Welche anderen Bezeichnungen gibt es noch außer __main__?
__name__ ist der Name der aufgerufenen Applikation
Das Script müsste ja dann main.py heißen oder? Oder verstehe ich da komplett was falsch?

Angenommen ich importiere deine Wetterklasse in ein Pythonscript von mir und ich möchte, dass ein gewisser Codeteil nur dann ausgeführt wird, wenn deine Klasse importiert wurde. Wie prüfe ich das?

--- [2019-04-23 20:17 CEST] Automatisch zusammengeführter Beitrag ---

Achja, was ich auch noch fragen wollte.

Ich möchte z.B. eine GUI mit zwei Feldern und einem Button und einem Label basteln.
In die zwei Felder kann man Zahlen eintippen und mit dem Button kann man dann die Summe aus beiden Zahlen berechnen, die Summe wird dann auf dem Label angezeigt.

Wie würde ich sowas mit einem GUI Builder für Python realisieren?
 
Zuletzt bearbeitet:

Brother John

(schein)heilig
Veteran

Registriert
1 Aug. 2013
Beiträge
235
__name__ ist eine interne Variable, in der Python den Namen des aktuellen Moduls hinterlegt. Ein Modul ist eine Pythondatei und kann prinzipiell entweder wie eine Mini-Library importiert werden (per `import`) oder direkt als Skript gestartet. __name__ sagt dir, auf welche Weise die Datei verwendet wurde. So kannst du Dateien bauen, die beides können.

Demo: Erstell dir zwei Dateien im selben Ordner:

dunder_name.py
[src=python]if __name__ == '__main__':
print(f'Called as a script. __name__ is: {__name__}')
else:
print(f'Imported as a module. __name__ is: {__name__}')[/src]

loader.py
[src=python]import dunder_name[/src]

Und jetzt ruf das Ding auf beide Arten auf:
Code:
$ python dunder_name.py 
Called as a script. __name__ is: __main__

$ python loader.py 
Imported as a module. __name__ is: dunder_name


  • Die f''-Stringformat-Syntax braucht mindestens Python 3.6. Ich hoffe, du bist mit was aktuellem unterwegs.
  • Viele interne Variablen, Spezialfunktionen, etc. sind in Python mit doppelten Unterstrichen am Anfang und Ende geschrieben: »double underscores«, oft als »dunder« abgekürzt.
 

musv

Bekannter NGBler

Registriert
15 Juli 2013
Beiträge
3.453
Ort
/dev/null
@musv: Und woher kommt __main__? Welche anderen Bezeichnungen gibt es noch außer __main__?
https://docs.python.org/3/reference/datamodel.html -> Callable Types

Ich verwende z.B. für mein Logging-System:
[src=python]self.__log("{}::{}".format(self.__class__.__name__,"empty_urls"),LOG_MODULE,'trace')[/src]
Damit schreibe ich ins Trace-Log den Klassen- und Funktionsname, ohne dass ich irgendwas hardcodieren muss.

Angenommen ich importiere deine Wetterklasse in ein Pythonscript von mir und ich möchte, dass ein gewisser Codeteil nur dann ausgeführt wird, wenn deine Klasse importiert wurde. Wie prüfe ich das?
Beispiel für Modulprogrammierung:
eins.py[src=python]
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

print("Eins: {}".format(__name__))
if __name__ == '__main__':
print("Du hast mich gestartet.")
else:
print("Ich bin nur ein Modul.")[/src]

Ausführen:
Code:
 ./eins.py 
Eins: __main__
Du hast mich gestartet.

Und jetzt die zweite Datei:
zwei.py
[src=python]
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import eins

print("Zwei: {}".format(__name__))[/src]

Ausführen:
Code:
Eins: eins
Ich bin nur ein Modul.
Zwei: __main__
Mehr braucht man nicht, um in Python Libs zu erstellen.

Die richtig geilen Sachen in Python sind aber sowas hier: Map-Reduce. Wenn du Dich über die Kommentare mit den """ wunderst, dass ist für Pydoc. Damit kannst du die Doku zu Deinem Projekt erstellen - analog zu Doxygen oder Javadoc.

Ich möchte z.B. eine GUI mit zwei Feldern und einem Button und einem Label basteln.…Wie würde ich sowas mit einem GUI Builder für Python realisieren?
Ich verwende momentan für C++ QT-Creator. Der hat auch ein GUI-Toolkit mit an Board, über das du per Drag&Drop eine GUI zusammenbasteln kannst. Wie angenehm QT-Creator jetzt im Zusammenspiel mit Python ist, weiß ich nicht. Bisher hab ich keine GUIs entwickelt. Mir ist aber QT wesentlich sympathischer als GTK. Und andere Grafiktoolkits kommen eigentlich aufgrund der Plattformunabhängigkeit weniger in Frage, außer du nimmst sowas wie Electron.

Die QT-Anbindung erfolgt über PyQt.
 

Brother John

(schein)heilig
Veteran

Registriert
1 Aug. 2013
Beiträge
235
Klassenattribute mit __ sind private, mit _ protected

Da muss ich in aller Stärke ein Veto einlegen. In Python ist immer alles public. Typisches protected und private existiert nicht. Soll heißen, es gibt keinen eingebauten Mechanismus, der den Zugriff verhindert. Das ist finde ich ein wichtiger Punkt, an den man sich von Anfang an gewöhnen sollte. Gibt sonst nur Tränen irgendwann später.

Es gibt eine praktisch überall benutzte und bekannte Konvention, Dinge als Implementierungsdetails zu markieren, von denen man von draußen doch bitte die Finger lassen soll: ein führender Unterstrich.

[src=python]class Miau:
def __init__(self):
self.a_public_attribute = 'moo'
self._an_internal_attribute_by_convention = 'meff'

def _an_internal_method(self):
print("Hey! I’m internal!")

# Nichts hindert mich an:
m = Miau()
print(self._an_internal_attribute_by_convention)
m._an_internal_method()[/src]

Der doppelte führende Unterstrich ist ein bisschen lästiger, weil er die Symbolnamen versaut. An »alles public« ändert das aber auch nichts.

[src=python]class NotPrivate:
def __mangled_method(self):
print('Hello, world!')

# Nur tippen und lesen wird lästiger:
np = NotPrivate()
np._NotPrivate__mangled_method()[/src]
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #32
Ok, __name__ habe ich jetzt verstanden. Danke für die tollen Erklärungen. :T

@musv: PyQt und QT-Creator schaue ich mir jetzt mal an. :)

Ein Tutorial zum Thema PyQt


Also so wie ich das jetzt verstanden habe funktioniert das folgendermaßen (laut dieser Website):
1. GUI mit QT-Creator erstellen
2. Der spuckt mir eine .ui Datei aus
3. .ui-Datei konvertieren in Pythoncode (.py)
4. Pythoncode von der GUI in das eigentliche Programm importieren (from blabla import blabla)
5. Programmlogik mit GUI verknüpfen

Ist das richtig?

Apropos Qt-Creator hat so ca. 20 GB, gibt es auch etwas Schlankeres?
 
Zuletzt bearbeitet:

Shodan

runs on biochips

Registriert
14 Juli 2013
Beiträge
661
Ort
Citadel Station
[src=python]key = "e%%%redacted%%%3" # API KEY eintragen[/src]
API Keys werden im Allgemeinen nach Registrierung vergeben, um sie bei Abuse revoken zu können und Rate-Limitierungen durchzusetzen. Keys sind daher Daten, die du in der Regel nicht veröffentlichen solltest.
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #34
Diesen Key habe ich schon längst gelöscht, keine Sorge. ;)
 

KingJamez

Aktiver NGBler

Registriert
18 Juli 2013
Beiträge
501
Erst mal ein Test zur Übung:
Und an "import" muss ich mich gewöhnen. Kennt man von JS/PHP eigentlich gar nicht.

In Javascript (es6), auf Node-Seiten nur mit `.mjs` files oder durch transpiling. Auf ClientSeite durch transpiling, in Blink-browsern aber auch mit `<script type="module" src="<file>.js"></script>` möglich.

In PHP gibt es Namespaces, ein ähnliches Konzept. Mit Composer ist das sehr einfach umzusetzen plus, der verwaltet auch sehr schön deine Abhängigkeiten.

Um TV Programme abzugreifen, bietet sich webgrab++ an, dort kannst du von unterschiedlichen Quellen TV-Programme holen.
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #36
Habe nun eine Klasse erstellt:
[src=python]
class test:
input = ""

def __init__(this, input):
this.input = input

def output(this):
print(this.input)

obj = test("hallo")
obj.output
[/src]

Hier müsste ja input auf den Wert "hallo" gesetzt werden und dann ausgegeben werden, warum gibt das Skript gar nichts aus?

Ah, okay. Ich Depp hab die Klammern () vergessen.

Sollte natürlich so aussehen:
[src=python]obj.output()[/src]

EDIT
Hier in diesem Beispiel funktioniert es nicht:
[src=python]
import requests
import json

class Wetter:
key = "xxx" # API KEY von openweathermaps eintragen
url = "https://api.openweathermap.org/data/2.5/weather?zip="
parameters = ",DE&units=metric&appid=" + str(key)
zip = ""
url2 = "https://api.openweathermap.org/data/2.5/weather?zip=" + str(zip) + ",DE&units=metric&appid=" + str(key)
data = ""
json = ""

def __init__(this, zip):
this.zip = zip

def printWeather(this):
this.data = requests.get(this.url2)
this.json = json.loads(this.data.text)
print("Stadt: " + str(this.json["name"]) + "\nTemperatur: " + str(this.json["main"]["temp"]))

if __name__ == "__main__":
zip = str(input("PLZ eingeben: "))
obj = Wetter(zip)
obj.printWeather()
[/src]

"zip" hat hier den Wert "".
Woran das liegt? Keine Ahnung.

--- [2019-04-24 13:30 CEST] Automatisch zusammengeführter Beitrag ---

So bin wieder ein Schritt weiter, ich habe PAGE gefunden. Ein GUI Builder/Designer für alle Plattformen.

Habe eine kleine GUI erstellt und exportiert.
Wie schreibe ich jetzt die Logik für die GUI? Ich lade mal die GUI hier hoch, Anhang anzeigen gui.zip.

[src=python]#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# GUI module generated by PAGE version 4.22
# in conjunction with Tcl version 8.6
# Apr 24, 2019 01:22:16 PM CEST platform: Darwin

import sys

try:
import Tkinter as tk
except ImportError:
import tkinter as tk

try:
import ttk
py3 = False
except ImportError:
import tkinter.ttk as ttk
py3 = True

import unknown_support

def vp_start_gui():
'''Starting point when module is the main routine.'''
global val, w, root
root = tk.Tk()
top = Toplevel1 (root)
unknown_support.init(root, top)
root.mainloop()

w = None
def create_Toplevel1(root, *args, **kwargs):
'''Starting point when module is imported by another program.'''
global w, w_win, rt
rt = root
w = tk.Toplevel (root)
top = Toplevel1 (w)
unknown_support.init(w, top, *args, **kwargs)
return (w, top)

def destroy_Toplevel1():
global w
w.destroy()
w = None

class Toplevel1:
def __init__(self, top=None):
'''This class configures and populates the toplevel window.
top is the toplevel containing window.'''
_bgcolor = '#d9d9d9' # X11 color: 'gray85'
_fgcolor = '#000000' # X11 color: 'black'
_compcolor = '#d9d9d9' # X11 color: 'gray85'
_ana1color = '#d9d9d9' # X11 color: 'gray85'
_ana2color = '#ececec' # Closest X11 color: 'gray92'

top.geometry("144x142+586+143")
top.title("New Toplevel")
top.configure(background="#d9d9d9")

self.Button1 = tk.Button(top)
self.Button1.place(relx=0.208, rely=0.352, height=32, width=77)
self.Button1.configure(activebackground="#ececec")
self.Button1.configure(activeforeground="#000000")
self.Button1.configure(background="#d9d9d9")
self.Button1.configure(cursor="fleur")
self.Button1.configure(foreground="#000000")
self.Button1.configure(highlightbackground="#d9d9d9")
self.Button1.configure(highlightcolor="black")
self.Button1.configure(text='''GET''')
self.Button1.configure(width=77)

self.Entry1 = tk.Entry(top)
self.Entry1.place(relx=0.069, rely=0.07,height=27, relwidth=0.847)
self.Entry1.configure(background="white")
self.Entry1.configure(cursor="fleur")
self.Entry1.configure(font="TkFixedFont")
self.Entry1.configure(foreground="#000000")
self.Entry1.configure(insertbackground="black")
self.Entry1.configure(width=122)

self.Text1 = tk.Text(top)
self.Text1.place(relx=0.069, rely=0.634, relheight=0.296, relwidth=0.889)

self.Text1.configure(background="white")
self.Text1.configure(font="TkTextFont")
self.Text1.configure(foreground="black")
self.Text1.configure(highlightbackground="#d9d9d9")
self.Text1.configure(highlightcolor="black")
self.Text1.configure(insertbackground="black")
self.Text1.configure(selectbackground="#c4c4c4")
self.Text1.configure(selectforeground="black")
self.Text1.configure(width=128)
self.Text1.configure(wrap="word")

if __name__ == '__main__':
vp_start_gui()[/src]

--- [2019-04-24 15:16 CEST] Automatisch zusammengeführter Beitrag ---

Und wieder ein Schritt weiter, sorry für die Unübersichtlichkeit.

Hier das fertige, funktionierende Skript: Anhang anzeigen wetterAbfragePLZ.zip

Bin richtig stolz auf mich. :)

--- [2019-04-24 16:09 CEST] Automatisch zusammengeführter Beitrag ---

So, jetzt hätte ich doch noch mal eine Frage. Thonny ist zwar ganz okay, aber die Autovervollständigung ist nicht so gut. Es werden einem die Methoden usw. angezeigt, aber man bekommt keine Beschreibung dazu. Gibt es einfach, schlanke Editoren mit Autocomplete + Beschreibung?

Unglaublich was ich hier die letzten Stunden geschrieben und was ich alles ausprobiert habe. Tut mir wirklich leid, falls hier jemand den Faden verliert. :uglyngb:
 
Zuletzt bearbeitet:

musv

Bekannter NGBler

Registriert
15 Juli 2013
Beiträge
3.453
Ort
/dev/null
Apropos Qt-Creator hat so ca. 20 GB, gibt es auch etwas Schlankeres?

Code:
du -hs /usr/lib64/qtcreator/
47M	/usr/lib64/qtcreator/
du -hs /usr/share/qtcreator/
6,6M	/usr/share/qtcreator/
 du -hs /usr/bin/qtcreator 
104K	/usr/bin/qtcreator
Ich komm auf 54 mb. Ich finde das jetzt nicht so dick. Da solltest du mal untersuchen, woher die anderen 19,95 GB bei Dir kommen.
 

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #38
@musv: Das hat sich ja sowieso geklärt. Benutze jetzt PAGE (tkinter).

--- [2019-04-24 22:05 CEST] Automatisch zusammengeführter Beitrag ---

Zur Übung habe ich noch schnell innerhalb von 3 Minuten einen kleinen billigen Taschenrechner programmiert. Macht aber sehr viel Spaß! :)

Hier: Anhang anzeigen taschenrechner.zip

taschenrechnerYY2W3B.gif
 
Zuletzt bearbeitet:

CPU

Neu angemeldet

Registriert
16 Feb. 2015
Beiträge
238
  • Thread Starter Thread Starter
  • #39
Vielen Dank an alle, die sich hier in diesem Thread beteiligt haben. Ihr habt mir wirklich sehr weitergeholfen! :beer:
Dank euch habe ich eine weitere tolle Programmiersprache kennen gelernt. :)
 
Oben