PyQt5 Resizable Frameless Window

Merhabalar PyQt5te Frameless bir uygulamayı nasıl resizable yapabilirim resize ile birlikte ekranda olan her şeyinde büyümesini istiyorum bunun için özel bir metod var mı yoksa kendim mi buna özel bir metod yazmalıyım

1 Beğeni
import sys
from PyQt5 import QtCore, QtWidgets

class FramelessResizable(object):
	def setup(self,f):
		f.setObjectName("Frameless-Resizable-Window")
		f.resize(300,400)
		self.gridLayout = QtWidgets.QGridLayout(f)
		
		self.button = QtWidgets.QPushButton(f)
		self.button.setText("Button")
		self.gridLayout.addWidget(self.button, 0, 0, 1, 1)

		self.sizegrip = QtWidgets.QSizeGrip(f)
		self.gridLayout.addWidget(self.sizegrip, 1, 0, QtCore.Qt.AlignBottom | QtCore.Qt.AlignRight)

		flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
		f.setWindowFlags(flags)
		

app = QtWidgets.QApplication(sys.argv)
f = QtWidgets.QWidget()
ui = FramelessResizable()
ui.setup(f)
f.show()
sys.exit(app.exec_())

En basit haliyle böyle. Takıldığın yer olursa sorabilirsin.

2 Beğeni

@Venoox knk denedin mi calisiyor mu bu?

gif
Çalışmasa atmazdım.

4 Beğeni

oluyor fakat bir sürü stackedwidget olduğu için sizegripi düzgünce ekleyemiyorum ekleyince diğerleri ekranla birlikte büyümüyor

1 Beğeni

isterseniz kodları atayım ama biraz karışık eğer yapamassak sıfırdan yapıcaz ana ekranı

1 Beğeni

Sizegrip eklemenin diğerlerini büyüyüp küçülmesine bi etkisi olduğunu sanmıyorum. Widget’ların yerleşimlerini yanlış yapıyor olabilirsin.

tekrardan bir gui yapmaya başladım hatalı oldukları için :frowning:

import sys

from PyQt5 import QtCore, QtWidgets , QtGui

from qtmodern.styles import dark

from qtmodern.windows import ModernWindow

from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

from PyQt5.QtCore import *

class MainWindow(object):

    def __init__(self):

        self.window = QtWidgets.QWidget()

        self.window.setGeometry(QtCore.QRect(500, 0, 800, 600))  # arbitrary size/location

        self.window.setMinimumSize(800,600)

        self.window.setMaximumSize(1366,768)

        self.main_screen_widget = QStackedWidget()

        self.main_screen_widget.setGeometry(0,35,80,700)

        self.normal_menu = QWidget()

        self.main_screen_widget.addWidget(self.normal_menu)

        self.stacked_widget = QStackedWidget()

        self.stacked_widget.setGeometry(100,35,2000,650)

        self.page1 = QWidget()

        self.stacked_widget.addWidget(self.page1)

        self.scene  =QGraphicsScene()

        self.greenBrush = QBrush(Qt.green)

        self.grayBrush = QBrush(Qt.gray)

 

        self.pen = QPen(Qt.red)

 

        self.graphicView = QGraphicsView(self.scene, self.normal_menu)

        self.graphicView.setGeometry(0,0,80,665)

        #label1

        self.label1 = QLabel("Code" , self.page1)

        self.label1.setFont(QFont('Firestarter' , 30))

        self.label1.setGeometry(460,0,100,80)

        self.label1.setStyleSheet("color:red")

        #duelLabel

        self.duelLabel = QLabel("Duel" , self.page1)

        self.duelLabel.setFont(QFont('Firestarter' , 30))

        self.duelLabel.setGeometry(560,0,80,80)

        self.duelLabel.setStyleSheet("color:orange")

        self.Welcome_Label = QLabel("Welcome to" , self.page1)

        self.Welcome_Label.setFont(QFont('Firestarter' , 30))

        self.Welcome_Label.setGeometry(220 , 0, 220,80)

        self.Welcome_Label.setStyleSheet("color:white")

        self.what_is_codeduel = QLabel("What is Code Duel?" , self.page1)

        self.what_is_codeduel.setFont(QFont('Gravity' , 25))

        self.what_is_codeduel.setGeometry(10,100,300,50)

        self.what_is_codeduel.setStyleSheet("color:silver")

        self.about_code_duel = QLabel("With Code Duel, you can fight codes with your friends.The first person \nwho finds the problem will win the duel.",self.page1)

        self.about_code_duel.setFont(QFont('Arial' , 20))

        self.about_code_duel.setGeometry(10,180,900,70)

        self.about_code_duel.setStyleSheet("color:rgb(220,220,220)")

        self.hBox = QtWidgets.QHBoxLayout()

        self.hBox.addWidget(self.stacked_widget)        

        self.layout = QtWidgets.QVBoxLayout()

        self.sizegrip = QtWidgets.QSizeGrip(self.window)

        self.layout.addLayout(self.hBox)

        self.layout.addWidget(self.main_screen_widget , QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom)

        self.layout.addWidget(self.sizegrip, 0, QtCore.Qt.AlignBottom | QtCore.Qt.AlignRight)

        self.window.setLayout(self.layout)

        
        

        self.mw = ModernWindow(self.window)  # qtmodern

        self.mw.show()

if __name__  == "__main__":

    

    app = QtWidgets.QApplication(sys.argv)

    ex = MainWindow()

    dark(app)  # qtmodern

    sys.exit(app.exec_())

burda şöyle bir görünüm elde etmek istiyorum ama başaramıyorum hepsininde ekranla birlikte büyümesini istiyorum menubar düzgün oldu fakat şu labellarda başka bir stacked widgeta eklediğim için sıkıntı çıktı ve şimdi menubara buttonda ekleyemiyorum pek bilgim yok layoutları çok kullanmıyordum araştırdım ama pek bir şey bulamadım yüksek ihtimal yanlış arattım : (