externe widget tonen in een frame met tkinder python

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • sanderbroos
  • Registratie: Juni 2013
  • Laatst online: 28-11-2023
Hallo allemaal,

Ik ben aan het hobbyen in Python en probeer een externe widget (html code, gehaald van Weeronline) ín een frame te laten zien. Ik ervaar 2 problemen:

-de widget laat wel zien dat hij er is, maar geen inhoud
-de widget toont niet ín het frame (frame2). Ik heb dit overigens ook met de buttons. Ik probeer nu steeds met .place(x= , y=) een label, frame of button op zijn plek te zetten, maar eigenlijk zou een button die ín een frame zit ook ín het frame getoond moeten worden en niet op het hele scherm. Ook met .grid lost dat het niet op vreemd genoeg. Hieronder de code die er nu is:


Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import time
from tkinter import *
from tkinter import messagebox
import datetime
import webbrowser
from tkhtmlview import HTMLLabel

root = Tk()
root.title("test")
root.iconbitmap ("favicon.png")
root.geometry("800x800")
root.resizable(False, True)
root.config(background="#FFFFFF")

#variabelen definieren
datum = datetime.datetime.now()

#frames definieren
frame1= LabelFrame(root, height=400, width=400, bg="#FFFFFF",  text="Gemeten buitentemperatuur", padx=250, pady=250).place(x=1,  y=1)
frame2= LabelFrame(root, height=400, width=500, bg="#FFFFFF", text="Temperatuursverwachting", padx=250, pady=250).place(x=401,  y=1)

#labels definieren
label1 = Label(root, text="Datum", bg="#FFFFFF").place(x=690, y=770)
datumlabel = Label(root, bg="#FFFFFF", text=datum.strftime("%x")).place (x=730, y = 770)

#html label
htmllabel1 = HTMLLabel(frame2, html="""<html> <body> <div style="max-width:500px"><iframe title="widget" width="100%" height="328px" frameBorder="0" scrolling="no" loading="lazy" src="https://www.weeronline.nl/widget/weather?id=4058458"></iframe></div> </body> </html>""").pack()


#msgboxen definieren
def msgbox1():
    c = messagebox.showinfo(title="test", message="testbericht")

#buttons definieren
b = Button(frame1, height=1, width=10, text="Dag", command = msgbox1).place(x=25, y=410)
b1 = Button(frame1, height=1, width=10, text="Maand", command = msgbox1).place(x=150, y=410)
b2 = Button(frame1, height=1, width=10, text="Jaar", command = msgbox1).place(x=280, y=410)
exitbutton = Button(root, text="Afsluiten", command = exit).place(x=10, y=770)

#programmaloop starten
root.mainloop()

Afbeeldingslocatie: https://tweakers.net/i/HCUyagLzQal6WH0m0XsbAOyEyMI=/x800/filters:strip_exif()/f/image/8y9I85B00G5IMIsaRBgPoa6e.png?f=fotoalbum_large

[ Voor 0% gewijzigd door MueR op 31-10-2022 17:45 . Reden: Code tags toegevoegd ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • Bene
  • Registratie: Augustus 2000
  • Laatst online: 19-09 11:18

Bene

list incomprehension

Oef! Is er uberhaupt een TKinter module die dit kan? Ik heb wel eens wat gedaan met tkinterweb en dat was al behelpen en de site aanpassen, dit met al die javascript en SVG bestanden wordt helemaal een zooitje. Ik heb het net met de HTMLFrame van tkinterweb geprobeerd en verder dan de tekst kom ik niet.

Zou je niet met een andere module een screenshot maken van die weeronline pagina en die in een frame laten zien?

Acties:
  • 0 Henk 'm!

  • sanderbroos
  • Registratie: Juni 2013
  • Laatst online: 28-11-2023
Bedankt voor je reactie. Ja met HTMLFrame schijn je dit soort dingen te kunnen doen. Een screenshot maken en dan bijv met Pillow erin zetten is geen optie omdat de weersverwachting actueel bijgewerkt word natuurlijk....

Acties:
  • +1 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 09:48

MueR

Admin Tweakers Discord

is niet lief

Ik heb je code even wat leesbaarder gemaakt door het geheel in code tags te zetten.

[ Voor 43% gewijzigd door MueR op 31-10-2022 17:47 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • sanderbroos
  • Registratie: Juni 2013
  • Laatst online: 28-11-2023
**Update**

Na veel googlen ben ik inmiddels een stuk verder! Er is dus een TkinterWeb module die dit allemaal kan. Werkt prima, alleen vreemd genoeg laat hij geen plaatjes zien, ook niet na het importeren van de pillow module. Iemand? Zie screenshot

Afbeeldingslocatie: https://tweakers.net/i/OWiEtOQ5g55wGWyGUOeBGBFB5yg=/800x/filters:strip_exif()/f/image/NT2F153XWofiszgyIwbTIjfd.png?f=fotoalbum_large

[code]
#import board
#mport adafruit_dht
#import psutil
import time
from tkinter import *
from tkinter import messagebox
import datetime
import webbrowser
from tkhtmlview import HTMLLabel
from tkinterweb import HtmlFrame
import PIL
from PIL import ImageTk

root = Tk()
root.title("test")
root.iconbitmap ("favicon.png")
root.geometry("1100x800")
root.resizable(False, True)
root.config(background="#FFFFFF")

#variabelen definieren
datum = datetime.datetime.now()

#frames definieren
frame1= LabelFrame(root, height=400, width=550, bg="#FFFFFF", text="Gemeten buitentemperatuur", padx=250, pady=250).place(x=1, y=1)
frame2= LabelFrame(root, height=400, width=550, bg="#FFFFFF", text="Temperatuursverwachting", padx=250, pady=250).place(x=551, y=1)

myhtmlframe = HtmlFrame(root, height=150, width=150) #create HTML browser
myhtmlframe.load_website("www.groendakcompleet.nl/weerwidget2.html") #Load some HTML code
myhtmlframe.place(x=560, y=35) #attach the HtmlFrame widget to the parent window


#labels definieren
label1 = Label(root, text="Datum", bg="#FFFFFF").place(x=690, y=770)
datumlabel = Label(root, bg="#FFFFFF", text=datum.strftime("%x")).place (x=730, y = 770)

#msgboxen definieren
def msgbox1():
c = messagebox.showinfo(title="test", message="testbericht")

#buttons definieren
b = Button(frame1, height=1, width=10, text="Dag", command = msgbox1).place(x=25, y=410)
b1 = Button(frame1, height=1, width=10, text="Maand", command = msgbox1).place(x=150, y=410)
b2 = Button(frame1, height=1, width=10, text="Jaar", command = msgbox1).place(x=280, y=410)
exitbutton = Button(root, text="Afsluiten", command = exit).place(x=10, y=770)

#programmaloop starten
root.mainloop()
[\code]

[ Voor 14% gewijzigd door sanderbroos op 02-11-2022 09:48 ]