在PySide中也可以做到
但少了邊框就無法拖拉移動視窗了
所以要自己寫
除了有無法拖拉移動視窗外
也要自己寫個元件可以最小化視窗、最大化以及關閉事件
裡面包含了最小化及關閉按鈕
並用pyside-uic 轉成.py檔
在main.py中import進來
設置成無邊框很簡單
只需要 self.setWindowFlags(Qt.FramelessWindowHint) 這行就可以了
最小化及關閉視窗事件,寫函式就可以達成,這裡用到的技巧是lambda
拖拉視窗就比較麻煩了,需重寫mousePressEvent() 跟 mouseMoveEvent()事件
# -*- coding: utf-8 -*-
import sys
from PySide.QtGui import *
from PySide.QtCore import *
import dragui
class MainWindow(QMainWindow, dragui.Ui_MainWindow):
def __init__(self, parent = None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.setWindowFlags(Qt.FramelessWindowHint)
# 設定關閉鍵
self.pushButton.clicked.connect(lambda: self.close())
# 設定最小化鍵
self.pushButton_2.clicked.connect(lambda: self.showMinimized())
def mousePressEvent(self, event):
# 定義滑鼠點擊事件
# 在此處我就已經定義拖拉的區域了,在區域內才會接受事件
if event.buttons() == Qt.LeftButton and \
self.frameGeometry().topLeft().y() < event.globalPos().y() < self.frameGeometry().topLeft().y() + 50:
self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
self.isinrect = True
event.accept()
else:
self.isinrect = False
event.ignore()
def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton and self.isinrect:
self.move(event.globalPos()-self.dragPosition)
event.accept()
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
結果如圖:
可以看到中間無邊框的視窗
並且只有上面的區域可以拖拉視窗
其他區域並不能
沒有留言:
張貼留言