Hi,

um Python zu programmieren brauchst du keine IDE und ich würde statt dessen es erstmal in einem Editor wie notepad++, notepad oder sonst einem anderen machen. Wenn deine Abgabe schon heute Abend ist.

Solltest du jedoch dennoch unbedingt eine IDE verwenden möchten empfehle ich vorrübegehend die IDLE von Python selber zu verwenden.

Helfen direkt kann ich dir bei diesem Problem nicht da ich noch nie Geany verwendet habe.

Funktioniert denn python selber? Also wenn du ein Programm über die Konsole startest?

Regards,

LifeArtist

...zur Antwort

Hi,

du hast leider nicht geschrieben welche Python version du verwendest. Denn ab python 3.3 braucht man z.B keine __init__.py files mehr.

Wenn du einen Ordner hast der projekt heißt. In diesem projekt ordner 2 Dateien hast:

  • globals.py
  • main.py

globals.py

var1 = 4

main.py

from globals import var1

print("var1: {}".format(var1))

Dann kannst du so in dieser main.py Datei via diesem import auf diese Variable(var1) zugreifen.

Es kann aber auch sein, dass deine IDE es als falsch ansieht aber es trotzdem funktioniert. Da eventuell dein main path nicht korrekt oder pylint oder welchen linter du verwendest nicht korrekt eingestellt wurde.

Wenn du es ausführst bekommst du dann eine Fehlermeldung von python?

Regards,

LifeArtist

...zur Antwort

Hi,

bin auch kein Fachmann. Ich würde aber behaupten, dass diese "Kabelklemmen" eher für das Optische gebraucht wurden. Also quasi damit die Kabel nicht durch das ein oder andere Bauteil gelegt werden müssen.

Regards,

LifeArtist

...zur Antwort
Python "Schere-Stein-Papier" funktioniert nicht, man kann nicht gewinnen?

Ich bin nun so gut wie fertig mit meinem Spiel, aber man kann nicht gewinnen. Ich habe es auch mit "try except" versucht, aber hat auch nicht funktioniert. Woran kann das liegen?

Ich weiß man könnte das schöner/besser machen, aber mir passt es so:)

Code:

#Imports
import time
import random
random.seed()

	#Headline
print("*************************"); time.sleep(0.5)
print("*Schere - Stein - Papier*"); time.sleep(0.5)
print("*************************"); time.sleep(0.5)

true = True

while true == True:

	print("-------------------------------") #Abtrennung
	#Input
	print("Wählen Sie eine Figur: ")
	spielerwahl = input().lower()
	print("")
	
	computerwahl = ["schere", "stein", "papier"]

	#Output
	print("Sie wählten: ", spielerwahl)
	pc = random.choice(computerwahl)
	print("Der Computer wählte: ", pc)
	print("")

	#Verzweigungen
	if spielerwahl == pc:
		print("*********Unentschieden!*********")
		
	#Spielerwahl = Schere
	elif spielerwahl == "schere" or spielerwahl == "Schere" and pc == "stein":
		print("***********Verloren!***********")
		
	elif spielerwahl == "schere" or spielerwahl == "Schere" and pc == "papier":
		print("***********Gewonnen!***********")
	
	#Spielerwahl = Stein
	elif spielerwahl == "stein" or spielerwahl == "Stein" and pc == "papier":
		print("***********Verloren!***********")
		
	elif spielerwahl == "stein" or spielerwahl == "Stein" and pc == "schere":
		print("***********Gewonnen!***********")
	
	#Spielerwahl = Papier
	elif spielerwahl == "papier" or spielerwahl == "Papier" and pc == "schere":
		print("***********Verloren!***********")
		
	elif spielerwahl == "papier" or spielerwahl == "Papier" and pc == "stein":
		print("***********Gewonnen!***********")
		
	#Fehlermeldung
	else:
		print("*********Nicht möglich!*********")
	
	#Abtrennung
	print("-------------------------------")
	print(""); time.sleep(1.5)
...zum Beitrag

Hi,

ich würde or's immer Klammern meines Wissens nach bindet hier das and stärker und somit würde dort

spielerwahl == "papier" or (spielerwahl == "Papier" and pc == "schere")

stehen.

Zu:

(spielerwahl == "papier" or spielerwahl == "Papier") and pc == "schere"
Ich weiß man könnte das schöner/besser machen, aber mir passt es so:)

Kannst dann hier aufhören zu lesen ;P

Ich würde aber die vielen IF's vermeiden und lieber eine Liste von Tupeln von Regeln aufstellen. z.B alle Tupel kombinationen die Gewinnen oder so. Dann kannst du eine Abfrage machen:

if (spielerwahl, pc) in gewinner_liste: pass

Dadurch ersparst du dir auch die vielen prints. Desweiteren hast du dir gut überlegt die Eingabe direkt in lower case zu lesen. Damit kannst du dir aber auch schon die

spielerwahl == "Papier" # und andere dementsprechenden Abfragen

Abfragen sparen.

Regards,

LifeArtist

...zur Antwort

Hi,

ich kann leider gerade nichts an einem Windows Rechner ausprobieren deswegen kann ich nur ohne einen 100% sicheren Ansatz Antworten.

Könntest du dann nicht trotzdem an dieses Window dieses MouseDown Event verwenden anstatt extra nochmal ein Grid dafür zu verwenden?

Du könntest sogar einfach das OnMouseLeftButtonDown Event verwenden. Dann brauchst du nicht extra eine IF Abfrage zu nutzen, wenn ich das in diesem Link richtig sehe:

https://stackoverflow.com/questions/1761854/cant-drag-and-move-a-wpf-form

Regards,

LifeArtist

...zur Antwort

Hi,

zusätzlich zu regex Antwort fällt mir noch eine andere ein:

https://docs.python.org/3.6/library/msvcrt.html

Dieses Modul läuft zwar nur auf Windows aber da du die py ja in eine exe compiliert hast denke ich, dass es kein Problem für dich darstellt. Dort gibt es die Methode

msvcrt.getch

die so funktionieren sollte wie ReadKey() in c#. Hier die Beschreibung:

Read a keypress and return the resulting character as a byte string. Nothing is echoed to the console. This call will block if a keypress is not already available, but will not wait for Enter to be pressed. If the pressed key was a special function key, this will return '\000' or '\xe0'; the next call will return the keycode. The Control-C keypress cannot be read with this function.

Regards,

LifeArtist

...zur Antwort

Hi,

wenn du Visual Studio Code verwenden möchtest, kannst du LiveShare verwenden.

https://visualstudio.microsoft.com/services/live-share/

Dort kannst du mit mehreren an einer Datei schreiben.

Regards,

LifeArtist

...zur Antwort

Hi,

mir ist auch nichts in tkinter der Art bekannt. Stattdessen würde ich zu pyqt ausweichen. Dort gibt es ein Widget welches eine Website darstellen kann. Ich hatte hier eine ähnliche Frage mal beantwortet und auch ein Beispiel dazu. https://www.gutefrage.net/frage/python-webseite-in-einer-gui-anzeigen

Ich würde mich aber echt Fragen was es für ein Sinn macht, eine Website anzeigen zu lassen. Die werden wahrscheinlich nichts anderes machen als alle x Sekunden die gleiche Anfrage zu schicken wie du sie schicken wolltest.

Wenn es dir um viel Design Freiheit geht, dann solltest du von tkinter fern bleiben. Dann solltest du dir so etwas wie z.B QT (pyqt) anschauen.

Regards,

LifeArtist

...zur Antwort

Hi,

Ich sehe jetzt noch nicht ganz den Sinn der Klasse die du dort hast.

Jedenfalls kannst du auf deine Liste YT immer zugreifen auch innerhalb deiner Klasse.

Also beispielsweise mit YT[0]

Der Einrückung anzusehen würde ich auch behaupten, dass du dort noch eine Funktion in dieser Klasse zu stehen hast. Sowas wie def __init__(self) ansonsten kannst du die Variable self nicht verwenden.

...zur Antwort

Hi,

ich würde es einfach per For-Schleife machen. Und das Tupel gleich entpacken:

for obst, count in L:
    print(obst)

Wenn du den Zähler überhaupt nicht verwenden willst, kannst du auch ein undifinierte Variable verwenden:

for obst, _ in L:
    print(obst)

Ausgabe:

Birnen
Äpfel
Bananen

Regards,

LifeArtist

...zur Antwort
YouTube Counter für eigene Webseite mit Python - Abonnenten werden nicht aktualisiert. Wie kann ich das Problem lösen?

Ich würde gern einen YouTube-Counter für mein Programm machen und wollte da halt die Top 10 YouTuber einbauen. Aber es soll, wenn ein YouTube-Kanal den anderen überholt automatisch geändert werden und dafür dachte ich, das ich das was du mir geschickt hast, verwenden kann. Aber so wie es aussieht, funktioniert es trotzdem nicht.

import tkinter as tk
import urllib.request
import json
import time

YouTube API KEY


YouTube Daten gesamt auslesen

pew_data = urllib.requesthttps://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=PewDiePie&key=key=key=key=" + key).read()
budentv_data = urllib.request.urlopen( https://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=Node&key=key=" + key).read()
tseries_data = urllib.request.urlopenhttps://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=TSeries&key=key=" + key).read()

Subscriber/Subs auslesen

pew_subs = json.loads(pew_data)["items"][0]["statistics"]["subscriberCount"]
budentv_subs = json.loads(budentv_data)["items"][0]["statistics"]["subscriberCount"]
tseries_subs = json.loads(tseries_data)["items"][0]["statistics"]["subscriberCount"]

Sortierung

def custom_sort(t):
  return t[1] L = [("PewDiePie", pew_subs), ("BudenTv", budentv_subs), ("T-Series", tseries_subs)]

L.sort(key=lambda x: x[1], reverse=True)

Tkinter Gui
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
  
Ergebnis wird angezeigt,

labels = {}


Mein Problem ist, dass, wenn ich das Skript laufen lasse, die Abonnenten nicht aktualisiert werden. Wie kann ich das Problem lösen?

...zum Beitrag

Hi,

Ich habe dir das als Kommentar geschrieben gehabt und deswegen hier nochmal als Antwort:

Also wenn du eine Echtzeit Anwendung haben möchtest, musst das das ein klein wenig anders machen. Du möchtest nicht jedesmal deine 10 Labels neu generieren nur weil es sein könnte, dass sich die Subscriber geändert haben. Da würde ich lieber allgemein 10 Labels haben welche die 10 Plätze repräsentieren.

Zusätzlich musst du immer wieder "pollen" (also die Daten neu Abgreifen) in einem gewissen Abstand. Das kannst du mit der after Methode in tkinter machen. http://effbot.org/tkinterbook/widget.htm (So habe ich das früher immer gemacht). Damit kannst du auch das GUI updaten.

Die Funktion die du mit after aufrufst müsste dann immer wieder die Daten pollen. In dieser musst du sie auch wieder neu sortieren. Wenn du dann die neue Sortierung hast, musst du nur noch jedem Label von den Text zuweisen wie deine neue Reihenfolge der sortierten Liste ist.

Um das möglichst dynamisch zu machen würde ich dann eine For-Loop über die L liste mit Hilfe der enumerate() Funktion machen.

for index, (item, count) in enumerate(L):
  pass

Dann wäre der Index der Rank des Youtube Accounts. Möglicherweise musst du L nochmal reversen aber das weiß ich jetzt nicht.

Regards,

LifeArtist

...zur Antwort

Hi,

du kannst tk.Label auch in einer Schleife verwenden. Was zuerst ge'pack't wurde wird auch als erstes angezeigt. So kriegst du es hin, dass es untereinander eingeblendet wird.

Ich würde mir die Labels dann in einem Dictionary aufheben um eventuell später nochmal drauf zugreifen zu können. Das gleiche kannst du auch für die Bilder machen. Ein Dictionary welches das Obst Bilder zuweist. Entweder nur den Pfad oder schon die Instanz des Bild Objektes.

#Tkinter Gui
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()

#Ergebnis wird angezeigt, das ist mein Problem wie mach ich es das ich die Sortierte Liste wieder auftrenne und jedes Ergebnis von der Sortierung alleine mit einem Bild angezeigt wird
labels = {}
for item, count in L:
    img_label = tk.Label(root, text = "image")
    label = tk.Label(root, text="{} {}".format(item, count))
    img_label.pack()
    label.pack()
    labels[item] = (label, img_label)
root.mainloop()

Deine einzige Aufgabe wäre dann noch zu schauen, wie du das Bild in einem Label anzeigen kannst. tk Labels haben so eine Option schon als Parameter.

Für was hast du eigentlich den Frame erstellt? Solltest du die Labels innerhalb des Frames haben wollen, musst du statt tk.Label(root, ... tk.Label(frame, ... schreiben.

Regards,

LifeArtist

...zur Antwort

Hey,

Du kannst einfach ein UMG Widget erstellen welches diese 2 besagten Balken beinhaltet. Da könntest du entweder Border Widgets für verwenden oder einfach eine vorgefertigte Textur verwenden.

Das UMG Widget Spawnst du dann für den Viewer und fertig :)

...zur Antwort

Guten Abend,

das scheint an den Normals zu liegen. Kurz: Die beschreiben, wie sich das Licht auf einer Ebene zu verhalten hat. (Meine Interpretation)

Falls du Zeit und Lust hast: https://en.wikipedia.org/wiki/Normal\_mapping

Um in deinem Fall dein Problem zu lösen, musst du die Normals umdrehen. Da selektierst du die Faces welche dir falsch erscheinen und shift+rechtsklick -> Face Normals -> Reverse.
Du kannst auch mit den anderen Einstellungen dort drin rumspielen wenn du alle Faces selektierst, kannst du es schaffen, dass es schneller geht. Propagate oder wo so... Bin gerade ein wenig beschäftigt sonst hätte ich dir noch eine genauere Anleitung geschrieben.

Regards,

LifeArtist

...zur Antwort

Guten Abend,

habe es leider erst heute gelesen. Ich würde das ganze erstmal in eine Vektorgrafik umwandeln damit du es so hochskalieren kannst wie du es möchtest (unterschied siehe Bild 1).

Wenn du dann die richtige größe gefunden hast, kannst du es als PDF speichern oder eine PDF aus dem erstellten Bild erstellen.
Öffnest du nun die PDF, kannst du auf den datei -> drucken gehen und Poster auswählen. (Bild 2)

Jetzt musst du nur noch die richtigen einstellungen finden. Diese findest du am besten heraus wenn du vorher einmal in eine PDF druckst, um zu sehen wie das zerstückelte Poster aussieht.

Ein Problem welches beim direkten Poster drucken auftaucht ist, dass Acrobat es randlos drucken möchte. Da der Drucker aber selber noch Sicherheitsränder mit druckt verschwindet ein Teil des Bildes. Deswegen ist es sinnvoll eine Überlappung anzugeben (siehe Bild 2)

Joa so hast du dann halt ein Poster in der größe deiner Wahl mit unbegrenzter Auflösung außer natürlich die Druckerauflösung ;)

Fallst du es immer noch brauchst kannst du mir ja noch mal eine PM/Kommentar schreiben.

Falls du es alleine machen möchtest, kannst du dir die Testversionen der Programme:

  • Adobe Illustrator (Für die Vektor umwandlung)
  • Adobe Acrobat (Für die Erstellung und drucken der PDF)

herunterladen.

Fröhliches drucken,

LifeArtist

...zur Antwort

Guten Abend,

Das sollen nur anregungen sein, was man so machen könnte.

An sich würde ich nicht noch mehr farben einbringen, als du schon in deinem Buchstaben hast. Ich selber bevorzuge das KISS-Prinzip (keep it simple stupid) halt so einfach wie möglich machen.

Zu den Hintergründen, die mir so spontan eingefallen sind, finde ich das letzte am besten.

  • Ein wenig Schatten beim Rahmen und Logo
  • Hintergrundfarbe des Kreises nicht ganz Weiss
  • Ist halt einfach

Viel Spaß,

LifeArtist

...zur Antwort

Moin,

Du kannst natürlich die Ground Plane weglassen aber da wirst du dann auch keine schönen Schatten bekommen.

Was du stattdessen machen kannst, ist ein volles render setup mit einer nun ja ummantelnden Plane. Dafür modellierst du dir ein gebilde welches den Hintergrund der Kamera komplett ausfüllt. Und so wirst du dann auch deine Horizontlinie los.

Hier ist ein Video für Cinema 4d welches genau das zeigt was ich gemeint habe: 

https://youtube.com/watch?v=gqo4Yv6Utr8

Unter dem Begriff "studio render" findest du auch noch mehr. Hier wird der Renderer Vray verwendet aber wenn du nicht hast spielt das auch keine Rolle, da es hier nur um das Setup handelt welches man auf jedes Programm jeden Renderer anwenden kann.

Im Anhang findest du auch ein schnell gemachtest setup in Maya als Beispiel.
Links die Kamera View und rechts das Setup von oben betrachtet.

Regards,
LifeArtist

...zur Antwort

Moin,

guck die mal qt an. Auf deren Website kannst auch direkt ein basic example für dein Anliegen finden:

 
PyQt5 QtCore QtGui QtWidgets
PyQt5. *
PyQt5. *
PyQt5. *
PyQt5. *
PyQt5. *
PyQt5. QApplication QWidget QMainWindow
 
app QApplication.
 
web QWebView
web.QUrl
web.
 
.app.

von: https://pythonspot.com/en/pyqt5-browser/

Das heißt bevor du das ausführen kannst, musst du erst mal das module PyQt5 installieren.

Regards,

LifeArtist

...zur Antwort
Hilfe bei Python. Irgendwer?

Die Funktionen: Sissors, Paper und Stone sollen zur Variable Spieler addieren, tun sie aber nicht :(

Weiß jemand wo der Fehler liegt?

    import tkinter
from random import randint
top=tkinter.Tk()


z=1


pcwahl=randint(1,3)


  

x=1

def sissors(event):
    global spieler
    if pcwahl==1:
        pwahl["text"]= "Die Wahl des PCs ist: Schere"
    elif pcwahl==2:
        pwahl["text"]="Die Wahl des PCs ist: Papier"
    elif pcwahl==3:
        pwahl["text"]="Die Wahl des PCs ist: Stein"
    spieler=spieler+1
        

def paper(event):
    global spieler
    if pcwahl==1:
        pwahl["text"]= "Die Wahl des PCs ist: Schere"
    elif pcwahl==2:
        pwahl["text"]="Die Wahl des PCs ist: Papier"
    elif pcwahl==3:
        pwahl["text"]="Die Wahl des PCs ist: Stein"
    spieler=spieler+2
         
def stone(event):
    global spieler
    if pcwahl==1:
        pwahl["text"]= "Die Wahl des PCs ist: Schere"
    elif pcwahl==2:
        pwahl["text"]="Die Wahl des PCs ist: Papier"
    elif pcwahl==3:
        pwahl["text"]="Die Wahl des PCs ist: Stein"
    spieler=spieler+3
        
üsch=tkinter.Label(top,font="Arial", text="Herzlich Willkommen!")
üsch.pack()
üsch2=tkinter.Label(top,font="Arial", text="Wählen Sie bitte Schere, Stein oder Papier.")
üsch2.pack()


schere=tkinter.Button(top,font="Arial",height=5,width=10, text="Schere")
schere.pack()
schere.bind("<Button-1>", sissors)

papier=tkinter.Button(top,font="Arial",height=5,width=10, text="Papier")
papier.pack()
papier.bind("<Button-1>", paper)

stein=tkinter.Button(top,font="Arial",height=5,width=10, text="Stein")
stein.pack()
stein.bind("<Button-1>", stone)

abstand=tkinter.Label(top,text=" ") 
abstand.pack()

pwahl=tkinter.Label(top,font="Arial", text=" ")
pwahl.pack()


wahl=tkinter.Label(top, text=" ")
wahl.pack()

spieler= 1



if spieler==1 and pcwahl==1:
    wahl["text"]= "Unentschieden!"
    
if spieler==1 and pcwahl==2:
    wahl["text"]="Sieg!"
elif spieler==2 and pcwahl==3:
    wahl["text"]="Sieg!"
elif spieler==3 and pcwahl==1:
    wahl["text"]="Sieg!"

if spieler==1 and pcwahl==3:
    wahl["text"]="Verloren :("
elif spieler==2 and pcwahl==1:
    wahl["text"]="Verloren :("
elif spieler==3 and pcwahl==2:
    wahl["text"]="Verloren :("

if pcwahl==1:
     print(spieler)




top.mainloop()  
...zum Beitrag

Moin,

die if abfragen werden deswegen nicht nochmal aufgerufen, weil sie nur einmal aufgerufen werden und dann tkinter in der mainloop drin ist. Deswegen solltest du einfach in die Funktion deine Abfragen packen, welche du jedes mal mit dem Button aufrufst.


Desweiteren würde ich über ein Dictionary nachdenken welches du benutzt um die pcwahl eleganter zu "dekodieren" (siehe mein geposteten code).
Die ganzen globalen variablen sind deswegen auch nicht mehr nötig weil ja nichts gespeichert werden muss.


Ich benutze hier das module functools welches es ermöglicht funktionen mit parametern zu übergeben ohne sie dabei aufzurufen. Kürze wäre das noch mit lambdas aber die sind etwas schwieriger zu verstehen.

Außerdem ist unentschieden wenn spieler == pcwahl ist und nicht nur wenn beide eins sind weil Stein und Stein wäre ja auch unentschieden und ist damit nicht abgedeckt.

Edit.: (Wichtig)
Fast hätte ich es vergessen, du hast die 3 Funktionen auf den Mausklick gelegt, das heißt wenn sie dann aufgerufen wurden, dann immer gleichzeitig und nicht wenn man auf den jeweiligen button klickt. (kann da aber auch falsch liegen) Normalerweise macht man das mit command und dann die funktion welche der button triggern soll.

Regards


import tkinter
from random import randint
from functools import partial


wahlNames = {1:"Schere", 2:"Papier", 3:"Stein"} pcwahl=randint(1,3)
def check(spieler): global pcwahl pwahl["text"]= "Die Wahl des PCs ist: {0}".format(wahlNames[pcwahl]) if spieler == pcwahl: # egal was gewählt wird wenn man die gleichen elemente hat ist unentschieden wahl["text"]= "Unentschieden!" elif spieler==1 and pcwahl==2: wahl["text"]="Sieg!" elif spieler==2 and pcwahl==3: wahl["text"]="Sieg!" elif spieler==3 and pcwahl==1: wahl["text"]="Sieg!" elif spieler==1 and pcwahl==3: wahl["text"]="Verloren :(" elif spieler==2 and pcwahl==1: wahl["text"]="Verloren :(" elif spieler==3 and pcwahl==2: wahl["text"]="Verloren :("
pcwahl=randint(1,3) # es muss auch eine neue wahl für den pc berechnet werden
top=tkinter.Tk()
üsch=tkinter.Label(top,font="Arial", text="Herzlich Willkommen!") üsch.pack() üsch2=tkinter.Label(top,font="Arial", text="Wählen Sie bitte Schere, Stein oder Papier.") üsch2.pack()
schere=tkinter.Button(top,font="Arial",height=5,width=10, text="Schere", command = partial(check, 1)) schere.pack()
papier=tkinter.Button(top,font="Arial",height=5,width=10, text="Papier", command = partial(check, 2)) papier.pack()
stein=tkinter.Button(top,font="Arial",height=5,width=10, text="Stein", command = partial(check, 3)) stein.pack()
abstand=tkinter.Label(top,text=" ") abstand.pack()
pwahl=tkinter.Label(top,font="Arial", text=" ") pwahl.pack()
wahl=tkinter.Label(top, text=" ") wahl.pack()
top.mainloop()

...zur Antwort

Ja wenn du in der normalen Ansicht bist, kannst du rechts weiter unten einen Button klicken neben dem Sync oder so draufsteht. Machst du den an, wird alles was du mit der Selection machst auch auf diese Selection angewendet.

...zur Antwort