aus tkinter

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

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()
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@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
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

@Alfons Mittelmeyer ja das ist nicht richtig eingerückt, da habe ich ein Fehler bei copy paste, ich kann es nicht mehr bearbeiten
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Guten Morgen, @Alfons Mittelmeyer ich habe es hinbekommen, rad bleibt wie es sein soll, jetzt versuche ich deinen Tipp mit Button disable
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

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()
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

ganja hat geschrieben: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
Ich kenne mich ja nicht mit qt aus und kann Dir nicht sagen, wie der Befehl heißt.
Die Ursache ist, dass zu Beginn der Start Button den Fokus hat. Nach Drehen des Rades hat er ihn aber nicht.
Also den Fokus wieder auf den Button setzen. Wahrscheinlich verliert der Button bei setEnabled(False) den Fokus.

Oder auch in der übrigen Gui den Leertastendruck implementieren.
Klar dass Du dann nicht beim Start die GUI auf disabled setzt, sondern nur den connect zurücknimmst.
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Ja mit dem setFocus habe ich schon probiert, einmal taste drücken Button wird irgendwie aktiviert oder so ähnlich beim 2 mal taste drücken dreht sich das Rad, vielleicht bin ich mit setFocus an der falschen stelle.
Ich habe es, es war die falsche stelle.
Danke @Alfons Mittelmeyer

Code: Alles auswählen

def rotate_pixmap(self):
		self.start.setEnabled(False)
		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,"rotation")
					self.stop_check()
					self.start.setEnabled(True)
					self.start.setFocus(True)
					
		transform = QtGui.QTransform().rotate(self.rotation)
		pixmap = self.pixmap.transformed(transform, QtCore.Qt.SmoothTransformation)
		self.label_2.setPixmap(pixmap)
Antworten