Seite 2 von 2
Re: GUI Dateien einbinden/öffnen
Verfasst: Sonntag 6. Dezember 2015, 17:51
von kodela
Danke @cofi für Deinen Rat.
Wegen dieses Problems habe ich heute die Version 2.7.6 deinstalliert und (in einen neuen Ordner) 2.7.11 und darüber hinaus auch noch 3.5 installiert. Trotzdem habe ich dieses Problem weiter. Ich habe niemals "webbroser" separat installiert. Trotzdem habe ich versucht, die Datei für diese Modul nach Deiner Empfehlung zu finden. Das hier ist das Ergebnis:
Code: Alles auswählen
C:\Python2>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print webbrowser.___file___
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'webbrowser' is not defined
>>>
Für die Version 3.5 sieht es so aus:
Code: Alles auswählen
C:\Python3>python
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:16:59) [MSC v.1900 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print (webbrowser.___file___)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'webbrowser' is not defined
>>>
Ich kann mir das nicht erklären, muss aber noch darauf hinweisen, dass zur Zeit zwei zusätzliche Module installiert sind, einmal vlc und dann requests. Letzteres habe ich aber erst installiert, als das Webbrowser-Modul nicht gefunden wurde. Beide Module waren in der Vergangenheit auch installiert und wurden für jeweils ein Testprogramm benötigt. Ich befasse mich zur Zeit nur mit Testprogrammen, um ein Gefühl für Python und dessen Möglichkeiten zu bekommen.
Nach einer Anpassung in der IDE von NetBeans sind übrigens alle meine bisher erstellten Testprogramme lauffähig.
MfG, kodela
Re: GUI Dateien einbinden/öffnen
Verfasst: Sonntag 6. Dezember 2015, 18:05
von pillmuncher
@kodela: Schau mal:
Code: Alles auswählen
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> webbrowser.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'webbrowser' is not defined
>>> import webbrowser
>>> webbrowser.__file__
'/usr/lib/python2.7/webbrowser.pyc'
Re: GUI Dateien einbinden/öffnen
Verfasst: Sonntag 6. Dezember 2015, 18:14
von cofi
Warum denkst du denn, dass die normalen Regeln hier nicht gelten sollten? Ein Name ist erst dann verfuegbar, wenn er importiert oder definiert wurde, wie es auch pillmuncher zeigt.
Planloses de- und reinstallieren kann hier auch nicht helfen, weil das Problem eben - sehr wahrscheinlich - ein eigenes Modul namens "webbrowser" ist. Und am besten probierst du es auch nicht in einer frischen Python-Shell aus, sondern ergaenzt das in dem Programm, das nicht funktioniert.
Zu guter Letzt, da `webbrowser` Teil der Standardbibliothek ist: Behalte die Dokumentation dazu immer griffbereit:
https://docs.python.org/2/library/
Re: GUI Dateien einbinden/öffnen
Verfasst: Sonntag 6. Dezember 2015, 18:32
von kodela
Hallo @pillmuncher:
Das sieht dann bei mir so aus:
Code: Alles auswählen
C:\Python3\requests-master>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> webbroser.___file___
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'webbroser' is not defined
>>> import webbrowser
>>> webbrowser.___file___
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '___file___'
>>>
Mit 2.7.11 sieht es entsprechend aus:
Code: Alles auswählen
C:\Python2>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import webbrowser
>>> webbrowser.___file___
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '___file___'
>>>
Noch etwas muss ich erwähnen: In meiner Ahnungslosigkeit hatte ich die Skriptdatei ursprünglich webbrowser.py benannt. Das ist aber bereits geändert worden.
Das Modul wird ja gefunden, nur hat es das Attribut "open" nicht. Ich suche jetzt einmal den ganzen Rechner ab, ob eventuell von der ursprünglichen Skriptdatei webbrowser.py irgendwo eine webbrowser.pyc gemacht wurde, die immer noch existiert und auf die zugegriffen wird.
MfG, kodela
Re: GUI Dateien einbinden/öffnen
Verfasst: Sonntag 6. Dezember 2015, 18:57
von kodela
Hallo @cofi: hallo @pillmuncher:
Es war so, wie cofi vermutet hat. Ohne dass mir das aufgefallen wäre, wurde von der Skriptdatei auf dem Laufwerk D: in meinem Projekteordner eine compilierte Fassung gespeichert und beim Import von webbrowser auf diese zugegriffen.
Danke für Eure Hilfe, durch die ich der Sache auf den Grund gekommen bin.
MfG, kodela
Re: GUI Dateien einbinden/öffnen
Verfasst: Mittwoch 9. Dezember 2015, 10:56
von pillmuncher
Noch was anderes:
kodela hat geschrieben:Code: Alles auswählen
>>> webbrowser.___file___
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '___file___'
Vergleich mal:
Special Method Names haben vorne und hinten jeweils zwei Unterstriche, nicht drei.
Re: GUI Dateien einbinden/öffnen
Verfasst: Donnerstag 10. Dezember 2015, 08:59
von kodela
@pillmuncher:
Danke für Deine Hinweise. Da habe ich ein weiteres Mal geschlampt.
MfG, kodela
Re: GUI Dateien einbinden/öffnen
Verfasst: Freitag 25. Dezember 2015, 20:49
von goldm4n
Hey @-all,
ich habe schnell mal eine Frage:
Ich habe eine GUI mit einem Label und zwei Buttons. Ich möchte wenn z.B. der User auf Button1 = "Weiter" klickt, dass sich ein neues leeres Fenster öffnet und das alte sich schließt.
also klar ist das ich ein Funktion definiere wo auf Buttton1 anspring aber weiter weis ich net

wie geht das?
Thx
Re: GUI Dateien einbinden/öffnen
Verfasst: Freitag 25. Dezember 2015, 21:57
von BlackJack
@goldm4n: Das `Tk`-Exemplar, und damit das Hauptfenster, darf man nicht zerstören sondern höchstens unsichtbar machen (`withdraw()`-Methode) und zusätzliche Fenster muss man mit `Toplevel` umsetzen weil es nur ein `Tk`-Exemplar zur gleichen Zeit geben darf. Die Rückruffunktion/-methode für die Schaltfläche müsste also das alte Fenster unsichtbar machen wenn es ein `Tk`-Exemplar ist und das neu Fenster erstellen.
Edit: Und `Button1` ist ein sauschlechter Name. Falsche Schreibweise (Grossbuchstabe), angehängte Nummer, und ein supergenerischer Name. Namen sollen dem Leser verraten was der Wert dahinter bedeutet. So etwas wie `next_button` oder `continue_button` wäre da eher hilfreich als `Button1`.
Re: GUI Dateien einbinden/öffnen
Verfasst: Freitag 25. Dezember 2015, 22:05
von goldm4n
Dankeschön!
Okay, das hört sich zimmlich kompliziert an

ich würde auch gerne mein Code ihr preisgeben, aber ich habe das mit der CodeBox immer noch nicht trauf

Re: GUI Dateien einbinden/öffnen
Verfasst: Freitag 25. Dezember 2015, 22:27
von goldm4n
Code: Alles auswählen
from tkinter import *
import time, sys, random
master = Tk()
w = Label(master, text="Bereit zu spielen?",
fg = "light green",
bg = "dark green",
font = " Helvetica 16 bold italic").pack()
master.title("MirPro")
master.geometry("300x100")
def weiter():
-->open???<--????
knopf1 = Button(master, text="Weiter",command=weiter)
knopf1.pack()
def schließen():
exit()
knopf2 = Button(master, text="Schließen!",command=schließen)
knopf2.pack()
def master():
master = Tk()
w = Label(master, text="Bereit zu spielen?",
fg = "light green",
bg = "dark green",
font = " Helvetica 16 bold italic").pack()
master.title("MirPro")
master.geometry("300x100")
Re: GUI Dateien einbinden/öffnen
Verfasst: Montag 28. Dezember 2015, 18:42
von goldm4n
noch eine andere frage:
ich habe ein Lotto Zahlen Generator versucht, klappt auch alles außer das es das Ergebnis in die shell ausgiebt anstatt im TK Modul.
Code: Alles auswählen
from random import *
from tkinter import *
import time
master = Tk()
w = Label(master, text="Deine Lotto zahlen",
fg = "light green",
bg = "dark green",
font = " Helvetica 16 bold italic").pack()
master.title("MirPro")
master.geometry("300x100")
ziehung = []
for i in range(6):
zahl = randint(1, 49)
ziehung = ziehung + [zahl]
print (ziehung)
master.mainloop()
Re: GUI Dateien einbinden/öffnen
Verfasst: Montag 28. Dezember 2015, 19:15
von BlackJack
@goldm4n: „klappt auch alles“ ist etwas übertrieben denn ich sehe nicht wo verhindert wird das die gleiche Zahl mehr als einmal gezogen werden kann. Das `random`-Modul kennt dafür eine sehr praktische `sample()`-Funktion.
``ziehung = ziehung + [zahl]`` ist eine ineffiziente Art die Ergebnisse zu sammeln. Listen haben eine `append()`-Methode mit der man an eine bestehenden Liste ein neues Element anhängen kann. Statt immer wieder einzelne Elemente in eine neue Liste zu packen und dann eine weitere Liste zu erstellen in welche die bisherigen Ergebnisse und die Liste mit dem einen neuen Element kopiert werden und dann die beiden “alten“ Listen verworfen werden.
Edit: Von GUI-Programmierung solltest Du vielleicht besser die Finger lassen bis die Grunddatentypen sitzen, Funktionen sinnvoll selbst geschrieben, und dann objektorientierte Programmierung in Grundzügen verstanden wurde. Das braucht man nämlich alles als Voraussetzung.
Re: GUI Dateien einbinden/öffnen
Verfasst: Montag 28. Dezember 2015, 19:26
von goldm4n
Ookay
und wie bekomme ich das Ergebnis in das Tk eingebunden?
muss ich in meinem Fall Master...irgendwas vor print (zahl) so das ich dem Tk sag das es zu ihm gehört?
Re: GUI Dateien einbinden/öffnen
Verfasst: Montag 28. Dezember 2015, 19:30
von BlackJack
@goldm4n: Nein, Du müsstest da irgendein Widget erstellen in dem Text dargestellt werden kann und den dann auf den gewünschten Text setzen. Mit `print()` ist da nichts zu wollen, es sei denn Du ersetzt `print()` oder die Standardausgabe und schreibst Code der das dann in einem Widget darstellt. Was aber für diesen Fall unnötig umständlich wäre.
Re: GUI Dateien einbinden/öffnen
Verfasst: Montag 28. Dezember 2015, 19:39
von goldm4n
Okay ich versuche mal mein Glück. Thx