Seite 1 von 2

aus tkinter

Verfasst: Freitag 11. August 2017, 09:37
von ganja
Hallo, vielleicht kann mir jemand hier auch helfen im tkinter Bereich wurde mir geholfen, ich möchte gerne das script umändern aber leider geht es nicht, grund ist das ich die leiste oben in dem script nicht haben möchte mit tkinter geht es nicht (linux) wurde schon im tkinter Bereich besprochen, hier mal der Code Problem ist übergabe des Bildes an label und rotate und vielleich noch mehr.
Vielleicht hat jemand Lust sich das anzuschauen.

Vielen Dank
Gruß ganja

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys, math
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import Qt
from PyQt5.uic import loadUi

from PIL import Image
import PIL
from PIL.ImageQt import ImageQt

#from Image import Image
#from Image import *


class Application(Qt.QMainWindow):
	def __init__(self, parent=None):
		super().__init__(parent)
		#### ohne border
		#self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
		
		self.ui = loadUi("wheel_gui.ui", self)
		
		self.start.clicked.connect(self.start_rotate)
		
		self.angle=0
		self.img_dict = {}
		self.angle_step = 0
		self.load_angle = 0
		self.step = 20
		
		pixmap = QtGui.QPixmap("pfeilunten1.png")
		self.label.setPixmap(QtGui.QPixmap(pixmap).scaled(50, 50, QtCore.Qt.IgnoreAspectRatio,QtCore.Qt.SmoothTransformation))
		self.label.setAlignment(QtCore.Qt.AlignCenter)
		
		#pixmap = QtGui.QPixmap("wheel.png")
		#self.label_2.setPixmap(QtGui.QPixmap(pixmap).scaled(650, 650, #QtCore.Qt.IgnoreAspectRatio,QtCore.Qt.SmoothTransformation))
		#self.label_2.setAlignment(QtCore.Qt.AlignCenter)
		
		im = Image.open('Gluecksrad_750_2.png')
		im = im.convert("RGBA")
		data = im.tobytes("raw","RGBA")
		qim = ImageQt(im)
		pix = QtGui.QPixmap.fromImage(qim)
		#self.label_2.setPixmap(pix)
		#self.graphicsScene.addPixmap(pix)
		#pix.show()
		#self.label_2(pix)
     
		self.load_image()
		self.label['image'] = self.img_dict[0]
		self.load_images()
           
     
	def start_rotate(self,event=None):
		if not self.angle_step:
			self.angle_step = 10
			self.angle = self.angle// 10 * 10
			self.img_rotate()
			self.Button['state'] = 'disabled'
			self.after(int(4500+random()*1000),self.wheel_stop)
     
	def load_images(self):
		if self.load_angle < 360:
			self.load_image()
			self.after(1,self.load_images)
     
     
	def load_image(self):
		self.img_dict[self.load_angle] = ImageQt(self.label_2.rotate(self.load_angle))
		#self.img_dict[self.load_angle] = ImageQt.PhotoImage(self.label_pil_img.rotate(self.load_angle))
		self.load_angle += 10
     
	def img_rotate(self):
		self.angle += self.angle_step
		self.angle = self.angle % 360
		if self.angle_step != 10:
			self.img = ImageQt(self.label_2.rotate(self.angle))
			self.label['image'] = self.img
			if not (self.angle % 15):
				self.angle_step = max(0,self.angle_step-1)
			if self.angle_step:
				self.after(self.step,self.img_rotate)
			else:
				self.Button['state'] = 'normal'
				print(self.angle)

		else:
			if self.angle not in self.img_dict:
				self.img_dict[self.angle] = ImageQt(self.label_2.rotate(self.angle))
			self.label['image'] = self.img_dict[self.angle]
			self.after(self.step,self.img_rotate)
     
	def wheel_stop(self,event=None):
		self.angle_step = 5


def main():
	app = Qt.QApplication(sys.argv)
	app_now = Application()
	app_now.show()
	#full ohne border
	#app_now.showFullScreen()
	app.exec_()

if __name__ == '__main__':
	main()
hier die ui

Code: Alles auswählen

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>961</width>
        <height>783</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <layout class="QVBoxLayout" name="verticalLayout">
        <item>
         <widget class="QWidget" name="widget" native="true">
          <layout class="QVBoxLayout" name="verticalLayout_2">
           <item>
            <widget class="QLabel" name="label">
             <property name="minimumSize">
              <size>
               <width>0</width>
               <height>50</height>
              </size>
             </property>
             <property name="maximumSize">
              <size>
               <width>16777215</width>
               <height>50</height>
              </size>
             </property>
             <property name="font">
              <font>
               <pointsize>48</pointsize>
               <weight>75</weight>
               <bold>true</bold>
              </font>
             </property>
             <property name="autoFillBackground">
              <bool>false</bool>
             </property>
             <property name="text">
              <string>v</string>
             </property>
            </widget>
           </item>
           <item>
            <widget class="QLabel" name="label_2">
             <property name="text">
              <string>TextLabel</string>
             </property>
            </widget>
           </item>
          </layout>
         </widget>
        </item>
        <item>
         <widget class="QWidget" name="widget_2" native="true">
          <property name="minimumSize">
           <size>
            <width>0</width>
            <height>100</height>
           </size>
          </property>
          <property name="maximumSize">
           <size>
            <width>16777215</width>
            <height>100</height>
           </size>
          </property>
          <layout class="QHBoxLayout" name="horizontalLayout_2">
           <item>
            <spacer name="horizontalSpacer_3">
             <property name="orientation">
              <enum>Qt::Horizontal</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>40</width>
               <height>20</height>
              </size>
             </property>
            </spacer>
           </item>
           <item>
            <widget class="QPushButton" name="start">
             <property name="minimumSize">
              <size>
               <width>0</width>
               <height>90</height>
              </size>
             </property>
             <property name="maximumSize">
              <size>
               <width>16777215</width>
               <height>90</height>
              </size>
             </property>
             <property name="font">
              <font>
               <pointsize>80</pointsize>
               <weight>75</weight>
               <bold>true</bold>
              </font>
             </property>
             <property name="text">
              <string>START</string>
             </property>
            </widget>
           </item>
           <item>
            <spacer name="horizontalSpacer_4">
             <property name="orientation">
              <enum>Qt::Horizontal</enum>
             </property>
             <property name="sizeHint" stdset="0">
              <size>
               <width>40</width>
               <height>20</height>
              </size>
             </property>
            </spacer>
           </item>
          </layout>
         </widget>
        </item>
       </layout>
      </widget>
     </widget>
     <resources/>
     <connections/>
    </ui>

Re: aus tkinter

Verfasst: Montag 14. August 2017, 10:13
von ganja
Ich habe weiter gemacht und kann jetzt das Bild um 15°, aber leider schaffe ich es nicht wenn man Button anklickt das sich das Bild 4 Sekunden + Zufall (1-2 Sekunden ) dreht, hat da niemand eine Idee oder ein Beispiel wie ich das realisieren kann, hiermit kann ich es um 15° drehen, mir fehlt einfach die Berechnung um das Bild gewisse zeit zu drehen im Moment bekomme ich es nicht hin, vielleicht geht es auch nicht mit label das weiß ich nicht, hoffe auf eure Unterstützung.
Danke

Code: Alles auswählen

pixmap1 = QtGui.QPixmap(self.img)
		self.rotation += 15
		transform = QtGui.QTransform().rotate(self.rotation)
		pixmap1 = pixmap1.transformed(transform, QtCore.Qt.SmoothTransformation)
		self.label_2.setPixmap(pixmap1)

Re: aus tkinter

Verfasst: Dienstag 15. August 2017, 07:41
von Alfons Mittelmeyer
Und wo muss ich dieses pixmap1 in Dein voriges Script hineinkopieren, damit etwas läuft?

Und dort finde ich auch kein self.img

Und bei Deinem Script erhalte ich folgende Fehlermeldung:

AttributeError: 'QLabel' object has no attribute 'rotate'

Stelle doch bitte ein Beispiel herein, das auch läuft

Re: aus tkinter

Verfasst: Dienstag 15. August 2017, 09:07
von ganja
Sorry, hier ein Beispiel, wo ich das bild um 15° drehen.
Danke

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-
     
import sys, math
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import Qt
from PyQt5.uic import loadUi
     
class Application(Qt.QMainWindow):
	def __init__(self, parent=None):
		super().__init__(parent)
		#### ohne border
		#self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
		
		self.ui = loadUi("wheel_gui.ui", self)
		
		self.start.clicked.connect(self.rotate_pixmap)
           
		pixmap = QtGui.QPixmap("pfeilunten1.png")
		self.label.setPixmap(
            QtGui.QPixmap(pixmap).scaled(50, 50, QtCore.Qt.IgnoreAspectRatio, QtCore.Qt.SmoothTransformation))
		self.label.setAlignment(QtCore.Qt.AlignCenter)

		self.img = (QtGui.QImage("Bild.png").scaled(580, 580, QtCore.Qt.IgnoreAspectRatio,
                                                                QtCore.Qt.SmoothTransformation))

		pixmap = QtGui.QPixmap(self.img)

		diag = (pixmap.width() ** 0 + pixmap.height() ** 0) ** 0.0
		self.label_2.setMinimumSize(diag, diag)
		self.label_2.setAlignment(QtCore.Qt.AlignCenter)
		self.label_2.setPixmap(pixmap)

		self.rotation = 0

	def rotate_pixmap(self):
		
		pixmap = QtGui.QPixmap(self.img)
		self.rotation += 15
		
		transform = QtGui.QTransform().rotate(self.rotation)
		pixmap = pixmap.transformed(transform, QtCore.Qt.SmoothTransformation)
		self.label_2.setPixmap(pixmap)
           
           
def main():
	app = Qt.QApplication(sys.argv)
	app_now = Application()
	app_now.show()
	#full ohne border
	#app_now.showFullScreen()
	app.exec_()
     
if __name__ == '__main__':
	main()

Re: aus tkinter

Verfasst: Dienstag 15. August 2017, 09:13
von BlackJack

Code: Alles auswählen

diag = (pixmap.width() ** 0 + pixmap.height() ** 0) ** 0.0
Das ist eine ziemlich umständliche Art ``diag = 1`` zu schreiben. :shock:

Re: aus tkinter

Verfasst: Dienstag 15. August 2017, 09:23
von ganja
Hallo @BlackJack hast du recht, aber so funktioniert es bei mir ohne das die Größe des Bildes verändert wird, vielleicht brauche ich es gar nicht, k.a. danke für den Hinweis ich werde schauen wie man das richtig macht, das die Größe des Bildes immer gleich bleibt.

diag = (pixmap.width()**2 + pixmap.height()**2)**0.1
so geht es auch ohne das die Größe verändert wird

Danke

Re: aus tkinter

Verfasst: Dienstag 15. August 2017, 09:55
von Alfons Mittelmeyer
Gut das geht jetzt. Wenn mann schnell hintereinander die Leertaste drückt, dann dreht sich das Rad.

@ganja: jetzt brauchst Du doch nur noch einen Timer, der in kurzen Zeitabständen die Leertaste drückt oder die dazugehörige Methode aufruft, dann dreht sich das Rad.

Übrigens: 15 ° Schritte sind gar nicht gut, das sieht so aus, als ob manches still steht. Ich hatte deswegen bei der tkinter Version 10 ° Schritte genommen.

Re: aus tkinter

Verfasst: Dienstag 15. August 2017, 10:21
von Alfons Mittelmeyer
@ganja: oben schreibst Du:

Code: Alles auswählen

        self.timer = QtCore.QTimer()
        self.start.clicked.connect(self.start_rotate_pixmap)
Und dann definiert Du etwa:

Code: Alles auswählen

    def start_rotate_pixmap(self):
        self.timer.timeout.connect(self.rotate_pixmap)
        self.timer.start(20)
Und bei den Grad solltest Du keine 15 ° nehmen. Am besten nimmst Du etwas was nicht gleich mit 15 aufgeht, etwa 9 ° wären gar nicht schlecht.

Ach so, Du hast ja eventuell gar keine Teilung in 24 sondern nur in 8 Teile, also keine 15 ° sondern 45 ° Schritte. Aber besser, wenn sich die Stellungen nicht so schnell wiederholen.

Und dann brauchst Du nur noch einen zweiten Timer, der nach einer gewissen Zeit dafür sorgt, daß sich das Rad verlangsamt und zum Stillstand kommt und dann wird auch der erste Timer gekillt.

Re: aus tkinter

Verfasst: Dienstag 15. August 2017, 10:43
von Alfons Mittelmeyer
ganja hat geschrieben: diag = (pixmap.width()**2 + pixmap.height()**2)**0.1
so geht es auch ohne das die Größe verändert wird
Danke
So geht es nicht, denn die Wurzel ist 0.5 und nicht 0.1

Re: aus tkinter

Verfasst: Dienstag 15. August 2017, 13:58
von ganja
hallo @Alfons Mittelmeyer Danke dir, jetzt habe ich es versucht mit dem 2 timer, aber leider muss ich aufgeben, ich habe gedacht mit dem Beispiel aus Progressbar würde es gehen aber ich bekomme es nicht hin,schade, habe gedacht einfach eine funktion mit der man timer.stop() aufruft, muss weiter schauen ob ich ein Beispiel irgendwo finde
Vielen Dank trotzdem

Code: Alles auswählen

def timerEvent(self, e):
    if self.step >= 100:
        self.timer.stop()
       # self.btn.setText('Finished')
        return

    self.step = self.step + 1
   # self.pbar.setValue(self.step)


def doAction(self):
    if self.timer.isActive():
        self.timer.stop()
        self.btn.setText('Start')
    else:
        self.timer.start(100, self)
        #self.btn.setText('Stop')

Re: aus tkinter

Verfasst: Freitag 18. August 2017, 01:18
von Alfons Mittelmeyer
ganja hat geschrieben:hallo @Alfons Mittelmeyer Danke dir, jetzt habe ich es versucht mit dem 2 timer, aber leider muss ich aufgeben, ich habe gedacht mit dem Beispiel aus Progressbar würde es gehen aber ich bekomme es nicht hin,schade, habe gedacht einfach eine funktion mit der man timer.stop() aufruft, muss weiter schauen ob ich ein Beispiel irgendwo finde
Vielen Dank trotzdem

Code: Alles auswählen

def timerEvent(self, e):
    if self.step >= 100:
        self.timer.stop()
       # self.btn.setText('Finished')
        return

    self.step = self.step + 1
   # self.pbar.setValue(self.step)


def doAction(self):
    if self.timer.isActive():
        self.timer.stop()
        self.btn.setText('Start')
    else:
        self.timer.start(100, self)
        #self.btn.setText('Stop')
Sorry, wo ist denn da ein zweiter timer? Und kein Mensch kann Dein Beispiel nachvollziehen, denn wo sind Deine images? Wenn es keiner starten kann. warum sollte Dir jemand helfen können?

Also ich habe Dein erstes Image auskommentiert, denn das habe ich nicht. Und dann habe ich folgendes als fortune.png genommen:

Bild

Und das ist dann das mit zweitem Timer, allerdings ohne langsamer werden:

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-
     
import sys, math
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import Qt
from PyQt5.uic import loadUi
     
class Application(Qt.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        #### ohne border
        #self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
       
        self.ui = loadUi("wheel_gui.ui", self)
       
        self.timer = QtCore.QTimer()
        self.start.clicked.connect(self.start_rotate_pixmap)
        self.timer2 = QtCore.QTimer()
        
        
        #pixmap = QtGui.QPixmap("pfeilunten1.png")
        #self.label.setPixmap(
            #QtGui.QPixmap(pixmap).scaled(50, 50, QtCore.Qt.IgnoreAspectRatio, QtCore.Qt.SmoothTransformation))
        #self.label.setAlignment(QtCore.Qt.AlignCenter)
 
        self.img = (QtGui.QImage("fortune.png").scaled(580, 580, QtCore.Qt.IgnoreAspectRatio,
                                                                QtCore.Qt.SmoothTransformation))
 
        self.pixmap = QtGui.QPixmap(self.img)
 
        diag = (self.pixmap.width() ** 0 + self.pixmap.height() ** 0) ** 0.0
        self.label_2.setMinimumSize(diag, diag)
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setPixmap(self.pixmap)
        self.rotation = 0
 
 
    def rotate_pixmap(self):
       
        self.rotation = (self.rotation + 1) % 360
        transform = QtGui.QTransform().rotate(self.rotation)
        pixmap = self.pixmap.transformed(transform, QtCore.Qt.SmoothTransformation)
        self.label_2.setPixmap(pixmap)

    def start_rotate_pixmap(self):
        self.timer.timeout.connect(self.rotate_pixmap)
        self.timer.start(20)
        self.timer2.setSingleShot(True)
        self.timer2.timeout.connect(self.stop_timer)
        self.timer2.start(5000)

    def stop_timer(self):
        self.timer.stop()
           
def main():
    app = Qt.QApplication(sys.argv)
    app_now = Application()
    app_now.show()
    #full ohne border
    #app_now.showFullScreen()
    app.exec_()
     
if __name__ == '__main__':
    main()
Und außerdem solltest Du, während das Rad läuft, den Start Button disablen.

Achtung mit Deiner Rotation stimmt etwas nicht. Ich habe es mal mit Schrittweite 1 gemacht, aber bei jedem Start wird es mehr. Das mußt Du mal überprüfen.

Re: aus tkinter

Verfasst: Sonntag 20. August 2017, 11:29
von Alfons Mittelmeyer
Fehler gefunden. Die connects für die Timer darf man nur einmal machen, sonst feuern die Timer immer öfter gleich auf einmal. Und jetzt ist es auch mit Verlangsamung und Endpositionierung in 15 Grad Schritten.

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-
     
import sys, math
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import Qt
from PyQt5.uic import loadUi
from random import random

     
class Application(Qt.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        #### ohne border
        #self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
       
        self.ui = loadUi("wheel_gui.ui", self)
       
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.rotate_pixmap)

        self.start.clicked.connect(self.start_rotate_pixmap)
        self.timer2 = QtCore.QTimer()
        self.timer2.setSingleShot(True)
        self.timer2.timeout.connect(self.stop_timer)
       
       
        #pixmap = QtGui.QPixmap("pfeilunten1.png")
        #self.label.setPixmap(
            #QtGui.QPixmap(pixmap).scaled(50, 50, QtCore.Qt.IgnoreAspectRatio, QtCore.Qt.SmoothTransformation))
        #self.label.setAlignment(QtCore.Qt.AlignCenter)
 
        self.img = (QtGui.QImage("fortune.png").scaled(580, 580, QtCore.Qt.IgnoreAspectRatio,
                                                                QtCore.Qt.SmoothTransformation))
 
        self.pixmap = QtGui.QPixmap(self.img)
 
        diag = (self.pixmap.width() ** 0 + self.pixmap.height() ** 0) ** 0.0
        self.label_2.setMinimumSize(diag, diag)
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setPixmap(self.pixmap)
        self.rotation = 0
 
 
    def rotate_pixmap(self):
       
        self.rotation = (self.rotation + self.step) % 360
        if self.step < 9:
            if not self.rotation % 15:
                self.step -= 1
                if not self.step:
                    self.timer.stop()
            

        transform = QtGui.QTransform().rotate(self.rotation)
        pixmap = self.pixmap.transformed(transform, QtCore.Qt.SmoothTransformation)
        self.label_2.setPixmap(pixmap)
 
    def start_rotate_pixmap(self):
        self.step = 9
        self.timer.start(20)
        self.timer2.start(int(4500+random()*1000))
 
    def stop_timer(self):
        self.step = 8           

def main():
    app = Qt.QApplication(sys.argv)
    app_now = Application()
    app_now.show()
    #full ohne border
    #app_now.showFullScreen()
    app.exec_()
     
if __name__ == '__main__':
    main()

Re: aus tkinter

Verfasst: Sonntag 20. August 2017, 17:40
von ganja
Vielen DANK @Alfons Mittelmeyer, Dankeschön, mucho gracias, Koran dankon,Many Thanks

Re: aus tkinter

Verfasst: Dienstag 22. August 2017, 16:25
von ganja
Hallo, jetzt habe ich einen Fehler den ich warscheinlich verursache, wenn ich das jetzt weiter ausbat möchte siehe code von @Alfons Mittelmeyer

Code: Alles auswählen

def rotate_pixmap(self):
       
        self.rotation = (self.rotation + self.step) % 360
        if self.step < 9:
            if not self.rotation % 15:
                self.step -= 1
                if not self.step:
                    self.timer.stop()
                    print (self.rotation) #!
                    self.stop.check() #!

def stop_check(self):
                        if  0 <= self.rotation <= 60: 
                        print ("ja")
                        self.check_gpio()
# Wenn "ja" zutrifft nach dem self.check_gpio() fertig ist dreht sich das Rad einwenig weiter! Rufe ich self.stop_check() an falscher            stelle auf? 
#self.check_gpio macht nur einen pin on und nach gewisser zeit wieder off

Re: aus tkinter

Verfasst: Dienstag 22. August 2017, 19:36
von Alfons Mittelmeyer
ganja hat geschrieben:Hallo, jetzt habe ich einen Fehler den ich warscheinlich verursache, wenn ich das jetzt weiter ausbat möchte siehe code von @Alfons Mittelmeyer

Code: Alles auswählen

def rotate_pixmap(self):
       
        self.rotation = (self.rotation + self.step) % 360
        if self.step < 9:
            if not self.rotation % 15:
                self.step -= 1
                if not self.step:
                    self.timer.stop()
                    print (self.rotation) #!
                    self.stop.check() #!

def stop_check(self):
                        if  0 <= self.rotation <= 60: 
                        print ("ja")
                        self.check_gpio()
# Wenn "ja" zutrifft nach dem self.check_gpio() fertig ist dreht sich das Rad einwenig weiter! Rufe ich self.stop_check() an falscher            stelle auf? 
#self.check_gpio macht nur einen pin on und nach gewisser zeit wieder off
Also, bei diesem rotate_pixmap dreht sich bei mir überhaupt nichts. Da ist ja nichts drin, damit sich etwas dreht.
Und bei print("ja") bekomme ich einen indentation error.

self.stop.check geht auch nicht, denn ein self.stop gibt es nicht. Und self.check_gpio gibt es auch nicht. Da geht ja dann sowieso nichts. Wundert mich, wieso dann bei Dir überhaupt etwas geht.

Re: aus tkinter

Verfasst: Dienstag 22. August 2017, 20:06
von ganja
Da muß ich dir zu stimmen @Alfons Mittelmeyer bei mir dreht sich auch nichts!
# in gpio.py wird pin on und nach 10 seconds wieder off geschaltet
Aber so:

Code: Alles auswählen

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
         
    import sys, math
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5 import Qt
    from PyQt5.uic import loadUi
    from random import random

    import os
    import sys
    import time
    import subprocess
     
         
    class Application(Qt.QMainWindow):
        def __init__(self, parent=None):
            super().__init__(parent)
            #### ohne border
            #self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
           
            self.ui = loadUi("wheel_gui.ui", self)
           
            self.timer = QtCore.QTimer()
            self.timer.timeout.connect(self.rotate_pixmap)
     
            self.start.clicked.connect(self.start_rotate_pixmap)
            self.timer2 = QtCore.QTimer()
            self.timer2.setSingleShot(True)
            self.timer2.timeout.connect(self.stop_timer)
           
           
            #pixmap = QtGui.QPixmap("pfeilunten1.png")
            #self.label.setPixmap(
                #QtGui.QPixmap(pixmap).scaled(50, 50, QtCore.Qt.IgnoreAspectRatio, QtCore.Qt.SmoothTransformation))
            #self.label.setAlignment(QtCore.Qt.AlignCenter)
     
            self.img = (QtGui.QImage("fortune.png").scaled(580, 580, QtCore.Qt.IgnoreAspectRatio,
                                                                    QtCore.Qt.SmoothTransformation))
     
            self.pixmap = QtGui.QPixmap(self.img)
     
            diag = (self.pixmap.width() ** 0 + self.pixmap.height() ** 0) ** 0.0
            self.label_2.setMinimumSize(diag, diag)
            self.label_2.setAlignment(QtCore.Qt.AlignCenter)
            self.label_2.setPixmap(self.pixmap)
            self.rotation = 0
     
     
        def rotate_pixmap(self):
           
            self.rotation = (self.rotation + self.step) % 360
            if self.step < 9:
                if not self.rotation % 15:
                    self.step -= 1
                    if not self.step:
                        self.timer.stop()
                        print (self.rotation)
			self.stop_check()
               
     
            transform = QtGui.QTransform().rotate(self.rotation)
            pixmap = self.pixmap.transformed(transform, QtCore.Qt.SmoothTransformation)
            self.label_2.setPixmap(pixmap)
     
        def start_rotate_pixmap(self):
            self.step = 9
            self.timer.start(20)
            self.timer2.start(int(4500+random()*1000))
     
        def stop_timer(self):
            self.step = 8 

       def stop_check(self):
           if  0 <= self.rotation <= 60:
                 print ("ja") 
                 self.check_gpio()
           #
           #

      def check_gpio(self):
           self.gpio_on()
           time.sleep(3)
           self.gpio_off

    def gpio_on(self):
         #time.sleep(0.1)
         to_run = "./gpio.py"
         proc=subprocess.Popen(to_run)

    def gpio_off(self):
         subprocess.check_output('kill $(ps ax | grep gpio.py | grep -v grep | awk \\'\{print $1\}\\')',shell=True)}      
     
    def main():
        app = Qt.QApplication(sys.argv)
        app_now = Application()
        app_now.show()
        #full ohne border
        #app_now.showFullScreen()
        app.exec_()
         
    if __name__ == '__main__':
        main()

Re: aus tkinter

Verfasst: Dienstag 22. August 2017, 20:20
von Alfons Mittelmeyer
@ganja: kann ich leider nicht nachvollziehen, denn ich bekomme folgenden Fehler:

Code: Alles auswählen

  File "wheel.py", line 74
    def stop_check(self):
                        ^
IndentationError: unindent does not match any outer indentation level

Re: aus tkinter

Verfasst: Dienstag 22. August 2017, 20:27
von ganja
@Alfons Mittelmeyer ja das ist nicht richtig eingerückt, da habe ich ein Fehler bei copy paste, ich kann es nicht mehr bearbeiten

Re: aus tkinter

Verfasst: Mittwoch 23. August 2017, 11:31
von ganja
Guten Morgen, @Alfons Mittelmeyer ich habe es hinbekommen, rad bleibt wie es sein soll, jetzt versuche ich deinen Tipp mit Button disable

Re: aus tkinter

Verfasst: Mittwoch 23. August 2017, 13:19
von ganja
Jetzt habe ich wieder ein Problem, nach dem man Button anklickt, ist der Button Disabled nach 6,5 sec ist der wieder da bereit zu klicken, leider lässt sich der Button nicht mehr mit der Tastatur anklicken nur noch mit der Maus?
Diesmal einrücken beachtet
Danke

Gruß
ganja

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-
         
import sys, math
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import Qt
from PyQt5.uic import loadUi
from random import random
     
         
class Application(Qt.QMainWindow):
	def __init__(self, parent=None):
		super().__init__(parent)
           
		self.ui = loadUi("wheel_gui.ui", self)
           
		self.timer = QtCore.QTimer()
		self.timer.timeout.connect(self.rotate_pixmap)
     
		self.start.clicked.connect(self.start_rotate_pixmap)
		self.timer2 = QtCore.QTimer()
		self.timer2.setSingleShot(True)
		self.timer2.timeout.connect(self.stop_timer)
		
		self.timer_button = QtCore.QTimer()
     
		self.img = (QtGui.QImage("fortune.png").scaled(580, 580, QtCore.Qt.IgnoreAspectRatio,
                                                                    QtCore.Qt.SmoothTransformation))
     
		self.pixmap = QtGui.QPixmap(self.img)
     
		diag = (self.pixmap.width() ** 0 + self.pixmap.height() ** 0) ** 0.0
		self.label_2.setMinimumSize(diag, diag)
		self.label_2.setAlignment(QtCore.Qt.AlignCenter)
		self.label_2.setPixmap(self.pixmap)
		self.rotation = 0
     
     
	def rotate_pixmap(self):
		self.rotation = (self.rotation + self.step) % 360
		if self.step < 9:
			if not self.rotation % 15:
				self.step -= 1
				if not self.step:
					self.timer.stop()
					print (self.rotation) 
               
     
		transform = QtGui.QTransform().rotate(self.rotation)
		pixmap = self.pixmap.transformed(transform, QtCore.Qt.SmoothTransformation)
		self.label_2.setPixmap(pixmap)
     
	def start_rotate_pixmap(self):
		self.check_button()
		self.step = 9
		self.timer.start(20)
		self.timer2.start(int(4500+random()*1000))
     
	def stop_timer(self):
		self.step = 8       
		
	def check_button(self):
		self.start.setEnabled(False)
		self.timer_button.singleShot(6500, lambda: self.start.setDisabled(False))
     
def main():
	app = Qt.QApplication(sys.argv)
	app_now = Application()
	app_now.show()
	app.exec_()
         
if __name__ == '__main__':
	main()