Fenster im 2 Bildschirm anzeigen

Fragen zu Tkinter.
syslink88
User
Beiträge: 14
Registriert: Mittwoch 14. November 2007, 15:47

Hallo
Ich will ein Programm schreiben zum Presentieren.
Nun will ich das, dass Fenster auf meinem 2 Bildschirm erscheint.
Ist das möglich?
Ich würde mich über eine Antwort freuen.

syslink
linuxfan
User
Beiträge: 11
Registriert: Mittwoch 19. September 2007, 16:05

Hi,
willst Du, dass man das auf zwei Bildschirmen sehen kann oder NUR auf dem zweiten Bildschirm.
Gruß linuxfan
syslink88
User
Beiträge: 14
Registriert: Mittwoch 14. November 2007, 15:47

Hi
Ich will das mann das Volbild NUR auf dem 2 Monitor sehen kann.

sysLINK
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

syslink88 hat geschrieben:Nun will ich das, dass Fenster auf meinem 2 Bildschirm erscheint.
Hallo syslink!

Ohne Worte ;-)

Code: Alles auswählen

>>> import wx
>>> app = wx.PySimpleApp()
>>> d = wx.Display()
>>> d.GetCount()
2
>>> d.Geometry
wx.Rect(0, 0, 1280, 1024)
>>> d.ClientArea
wx.Rect(0, 0, 1280, 994)
>>> d.IsPrimary()
True
>>> d2 = wx.Display(1)
>>> d2.Geometry
wx.Rect(1280, 0, 1152, 864)
>>> d2.IsPrimary()
False
>>> 
Mit diesen Daten kannst du ein wx.Frame (ohne Rahmen) genau in das zweite Fenster positionieren.
Ob das unter Linux auch so funktioniert, musst du selber ausprobieren. Ich kann mir vorstellen, dass es Unterschiede gibt, je nachdem ob man xinerama (ich glaube das heißt so) einsetzt oder nicht.

mfg
Gerold
:-)

EDIT: Ups, das ist ja das Tkinter-Forum. :mrgreen:
EDIT2: Suchworte hinzugefügt

Suchworte: Screen Display Desktop Size Größe wxPython
Zuletzt geändert von gerold am Donnerstag 10. Januar 2008, 09:04, insgesamt 2-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
syslink88
User
Beiträge: 14
Registriert: Mittwoch 14. November 2007, 15:47

bei mir funst das nicht aber ich will Tkinter nehmen.
Nun hab ich Canvas eingebunden um im Hintergrund ein Bild zu haben.
Sowie einige Texte.
Ich will nun noch eine Uhr einbauen und da hab ich noch einige Probleme.
Ich weis nicht wie ich in der schleife denn Text im canvas ändern kann.


sysLINK
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

:arrow: Tk.geometry(...)
:arrow: .after(ms, funk, [args,])
:arrow: Canvas.update()
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

syslink88 hat geschrieben:Ich will nun noch eine Uhr einbauen und da hab ich noch einige Probleme.
Die soll man doch aber hoffentlich nicht auf der Präsentation sehen, oder? Uhrzeit auf Folien bei Präsentationen machen, zumindest mich, immer so schläfrig. :roll:
syslink88
User
Beiträge: 14
Registriert: Mittwoch 14. November 2007, 15:47

Nein ich hab das nicht so ganz richtig erklärt es ist ein coundown.
Der auf eine bestimmte Zeit hinlaufen soll.
syslink88
User
Beiträge: 14
Registriert: Mittwoch 14. November 2007, 15:47

das mit dem
update
verstehe ich nicht so ganz
ich hab ja um nen text anzuzeigen

Code: Alles auswählen

c.create_text('15.3c','5.4c',text=variabel,
                         font=('Arial', 40), anchor=W ,fill='white')
nun wie kann ich diesen Text updaten in einer Schleife?
In der schleife ändert sich schon die variabel.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Noch ein Tip: wenn du die zeit nur als normalen text anzeigst, kannst du auch ein Label mit ner tkVariable nehmen und aufs Canvas packen. Zudem solltest du den Countdown über eine ".after-Rekursion" regeln um den tk-loop nicht zu anzuhalten.
syslink88
User
Beiträge: 14
Registriert: Mittwoch 14. November 2007, 15:47

Nun das ist das 1. Mal das ich mit Tkinter arbeite.
Und wie soll ich die tkVariable nehmen?
.after-Rekursion ? Wie kann ich den denn einbinden?
BlackJack

Mit tk-Variablen sind Instanzen von den Klassen gemeint, deren Name mit `Var` endet, also zum Beispiel `Tkinter.IntVar` oder `Tkinter.StringVar`. Die haben jeweils eine `get()`- und eine `set()`-Methode um den Wert auszulesen oder zu setzen.

Die `after()`-Methode ist über jedes Widget aufrufbar. Schau einfach mal in die Doku.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Nagut, hier mal ein Bsp., ungetestet:

Code: Alles auswählen

import Tkinter as tk
import time
class Test():
   def init(self):
      self.master = tk.Tk()
      self.var = tk.StringVar()
      tk.Label(textvariable=self.var).pack() # alternativ in Canvas packen
      self.time_update()

   def time_update(self):
       self.var.set(strftime("Zeit: %X"))
       self.master.after(1000, self.time_update)

Test().master.mainloop()
[/code]
syslink88
User
Beiträge: 14
Registriert: Mittwoch 14. November 2007, 15:47

Ok danke für das Bsp.
Nun hab ich es etwas besser verstanden.
Nun der Befehl self.master.after fürt nach 1000 den den Befehl self.time_update aus hab ich das so richtig erkannt?

Nun wie binde ich das in Canvas ein.

Hier ist mein erstes Programm.

Code: Alles auswählen

from Tkinter import *
from time import *
import thread 
import popen2,subprocess,os 

def end(event=None): 
    root.destroy()

 
def go():                 #schleife die eigentlich alles Aktualiesiern sollte
    while 1:
        timesec = gmtime()[5]
        zeitsec = 60 - timesec
        
        
        sleep(0.5)
root=Tk()
zeit = 50
timest = gmtime()[3]
timemin = gmtime()[4]
timesec = gmtime()[5]
endst = 19                   #End Stunde
endmin = 59                #End Minute
zeitst = endst - timest
zeitmin = endmin - timemin
zeitsec = 60 - timesec
    
root.state('zoomed') 
root.overrideredirect( 1 )    
c = Canvas(master=root, width=1280, height=800,background='black') 
#hintergrund = PhotoImage(file="darkflame.gif") 
#c.create_image(0,0, image=hintergrund, anchor=NW)
c.create_text('15.3c','3.4c',text='Text: ',
              font=('Arial', 40), anchor=W ,fill='white')
                
#Zeitangabe die sich updaten soll    
c.create_text('15.3c','5.4c',text=zeitst,
                         font=('Arial', 40), anchor=W ,fill='white')
c.create_text('16.3c','5.4c',text=":",
                         font=('Arial', 40), anchor=W ,fill='white')
c.create_text('16.8c','5.4c',text=zeitmin,
                         font=('Arial', 40), anchor=W ,fill='white')
c.create_text('18.3c','5.4c',text=":",
                         font=('Arial', 40), anchor=W ,fill='white')
c.create_text('18.8c','5.4c',text=timesec,
                         font=('Arial', 40), anchor=W ,fill='white')


c.pack()
#go()
         
root.bind_all('<KeyPress-Escape>', end)


root.mainloop()
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

:arrow: Canvas.create_window(x, y[, window=[TkinterObjekt][, ...]])
syslink88
User
Beiträge: 14
Registriert: Mittwoch 14. November 2007, 15:47

Ok danke ich habst damit hinbekommen.
Nun kahm das nächste Problem auf wenn eine zeit bei 10 sec angekommen ist hängt sich das Programm auf.

Code: Alles auswählen

from Tkinter import * 
from time import *
import time 
import thread 


class TimerTest: 
    def __init__(self): 
        self.status = 1 
        root = Tk()
        #root.state('zoomed')       #Vollbild
        #root.overrideredirect( 1 ) #Vollbild

        

        c = Canvas(master=root, width=1280, height=800,background='black') 


        self.l = Label(font=('Arial',40),fg='white',bg='black') 
        self.l.pack
        self.o = Label(font=('Arial',40),fg='white',bg='black') 
        self.o.pack
        self.p = Label(font=('Arial',40),fg='white',bg='black') 
        self.p.pack

        #hintergrund = PhotoImage(file="darkflame.gif") 
        #c.create_image(0,0, image=hintergrund, anchor=NW)
    
        c.create_text('15.3c','3.4c',text='Text: ',
                     font=('Arial', 40), anchor=W ,fill='white')




        c.create_text('18.3c','5.4c',text=":",
                     font=('Arial', 40), anchor=W ,fill='white')
        c.create_text('14.3c','5.4c',text=":",
                     font=('Arial', 40), anchor=W ,fill='white')

        c.create_window('16.8c','5.4c', window=self.o)
        c.create_window('19.8c','5.4c', window=self.l)
        c.create_window('13.8c','5.4c', window=self.p)
        c.pack()
        self.go()
        root.mainloop() 
         
    def go(self): 
        self.status = 1 
        thread.start_new_thread(self.endless,()) 

    def endless(self): 
        i = 0 
        while self.status: 
            timest = gmtime()[3]
            timemin = gmtime()[4]
            timesec = gmtime()[5]
            endst = 20
            endmin = 30
            zeitst = endst - timest
            zeitmin = endmin-  timemin
            zeitsec = 59 - timesec

            self.p.configure(text=zeitst) 
            self.o.configure(text=zeitmin)            
            self.l.configure(text=zeitsec) 
            time.sleep(1) 
            i += 1  

    def stop_it(self): 
        self.status = 0 


TimerTest()
syslink88
User
Beiträge: 14
Registriert: Mittwoch 14. November 2007, 15:47

Danke für den Link der ist super.
Aber das Problem hier ist es das der nur auf 0 runterläuft und nicht auf
eine Zeit.
Ich versuche das schon zu verändern bekomme es aber nicht hin.

sysLINK
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

es hilft im allgemeinen, die tips die man bekommt, zu beachten :wink:
syslink88
User
Beiträge: 14
Registriert: Mittwoch 14. November 2007, 15:47

Jo werde ich machen.
Antworten