2016-06-09 13 views
2

Ich habe ein Beispiel gefunden, um Grenzen für ein rahmenloses Fenster zu setzen, es ist jedoch nicht ziehbar. Wie kann ich ein rahmenloses Fenster ziehbar machen? Besonders wenn ich ein Beispiel sehen kann, wird es großartig. Hier ist mein Beispielcode (normalerweise ist der Code länger, deshalb gibt es viele Bibliotheken, denen sie nichts ausmacht);PyQt5 ziehbares rahmenloses Fenster

from PyQt5.QtWidgets import (QMessageBox,QApplication, QWidget, QToolTip, QPushButton, 
          QDesktopWidget, QMainWindow, QAction, qApp, QToolBar, QVBoxLayout, 
          QComboBox,QLabel,QLineEdit,QGridLayout,QMenuBar,QMenu,QStatusBar, 
          QTextEdit,QDialog,QFrame,QProgressBar 
          ) 
from PyQt5 import QtCore, QtWidgets, QtGui 
from PyQt5.QtGui import QIcon,QFont,QPixmap,QPalette 
from PyQt5.QtCore import QCoreApplication, Qt,QBasicTimer 

import sys 

class cssden(QMainWindow): 
    def __init__(self): 
     super().__init__() 


     self.mwidget = QMainWindow(self) 
     self.setWindowFlags(QtCore.Qt.FramelessWindowHint) 


     #size 
     self.setFixedSize(320, 450) 
     self.center 


     #label 
     self.lbl = QLabel(self) 
     self.lbl.setText("test") 
     self.lbl.setStyleSheet("background-color: rgb(0,0,0);" 
           "border: 1px solid red;" 
           "color: rgb(255,255,255);" 
           "font: bold italic 20pt 'Times New Roman';") 
     self.lbl.setGeometry(5,5,60,40) 

     self.show() 

    #center 
    def center(self): 
     qr = self.frameGeometry() 
     cp = QDesktopWidget().availableGeometry().center() 
     qr.moveCenter(cp) 
     self.move(qr.topLeft()) 

app = QApplication(sys.argv) 
app.setStyleSheet("QMainWindow{background-color: darkgray;border: 1px solid black}") 

ex = cssden() 
sys.exit(app.exec_()) 

Antwort

4

Sie müssen die Mausereignisse selbst behandeln.

  • Wir brauchen ein Event auf mousePressEvent, hinzuzufügen, die an die Stelle zu halten, wo wir zuletzt auf dem Fenster geklickt
  • Dann werden fügen wir ein mouseMoveEvent, die den Abstand zwischen dem letzten klickten Punkt berechnen wird und die aktuelle Mausposition Wir werden das Fenster entsprechend dieser Entfernung verschieben.

Dies ist der feste Code:

from PyQt5.QtWidgets import (QMessageBox,QApplication, QWidget, QToolTip, QPushButton, 
          QDesktopWidget, QMainWindow, QAction, qApp, QToolBar, QVBoxLayout, 
          QComboBox,QLabel,QLineEdit,QGridLayout,QMenuBar,QMenu,QStatusBar, 
          QTextEdit,QDialog,QFrame,QProgressBar 
          ) 
from PyQt5 import QtCore, QtWidgets, QtGui 
from PyQt5.QtGui import QIcon,QFont,QPixmap,QPalette 
from PyQt5.QtCore import QCoreApplication, Qt,QBasicTimer, QPoint 

import sys 

class cssden(QMainWindow): 
    def __init__(self): 
     super().__init__() 


     self.mwidget = QMainWindow(self) 
     self.setWindowFlags(QtCore.Qt.FramelessWindowHint) 


     #size 
     self.setFixedSize(320, 450) 
     self.center() 


     #label 
     self.lbl = QLabel(self) 
     self.lbl.setText("test") 
     self.lbl.setStyleSheet("background-color: rgb(0,0,0);" 
           "border: 1px solid red;" 
           "color: rgb(255,255,255);" 
           "font: bold italic 20pt 'Times New Roman';") 
     self.lbl.setGeometry(5,5,60,40) 

     self.oldPos = self.pos() 

     self.show() 

    #center 
    def center(self): 
     qr = self.frameGeometry() 
     cp = QDesktopWidget().availableGeometry().center() 
     qr.moveCenter(cp) 
     self.move(qr.topLeft()) 

    def mousePressEvent(self, event): 
     self.oldPos = event.globalPos() 

    def mouseMoveEvent(self, event): 
     delta = QPoint (event.globalPos() - self.oldPos) 
     #print(delta) 
     self.move(self.x() + delta.x(), self.y() + delta.y()) 
     self.oldPos = event.globalPos() 

app = QApplication(sys.argv) 
app.setStyleSheet("QMainWindow{background-color: darkgray;border: 1px solid black}") 

ex = cssden() 
sys.exit(app.exec_()) 
+0

große Werke. Darf ich fragen, gibt es Beispiele für Mausereignisse wie das Schweben der Maus etc.? Es gibt nur ungefähr C++ - Beispiele und ich habe Probleme, sie in Python zu konvertieren. – GLHF

+0

Ja, ich weiß, dass es nicht viele Python-Beispiele gibt. Ich denke, der beste Weg ist zu verstehen, wie man den Qt C++ Code in Python konvertiert. Es ist nicht so kompliziert wie es am Anfang scheint. –

+0

Hier ist ein ähnliches [Codebeispiel] (https://gist.github.com/zed/77e705caa840bab117057952f9ca6191) – jfs