Qt okno i contextMenu, ale również dropMenu (dlaczego ma ramki)

Qt okno i contextMenu, ale również dropMenu (dlaczego ma ramki)
Radosław Głębicki
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Sardine, Italy
  • Postów: 192
0

Witam

Taki oto programik:

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

import sys

from PyQt5.QtWidgets import QMainWindow,  QApplication, QPushButton, QAction, QMenu
from PyQt5.QtCore import Qt

def f_winMenu(*d):
	QtwinMenu = QMenu(Qwindow)
	#
	QtMtitle  = QtwinMenu.addAction("winMenu")
	QtMtitle.setEnabled(False)
	QtwinMenu.addSeparator()
	QtMopt1  = QtwinMenu.addAction("Option 1")
	QtMopt2 = QtwinMenu.addAction("Option 2")
	QtwinMenu.addSeparator()
	QtMquit   = QtwinMenu.addAction("Quit")
	QtMresult = QtwinMenu.exec_(Qwindow.mapToGlobal(d[0].pos()))
	#
	if QtMresult == QtMquit:
		if Qwindow: Qwindow.close()
		oQtApp.exit(0)
	return None
def f_drop(*d):
	if "QDragEnterEvent" in str(d[0]):
		d[0].accept()
		return None
	QtdropMenu   = QMenu(Qwindow)
	QtDropFrom   = QtdropMenu.addAction("dropMenu")
	QtDropFrom.setEnabled(False)
	QtdropMenu.addSeparator()
	QtDrOpt1  = QtdropMenu.addAction("Drop Option 1")
	QtDrOpt2  = QtdropMenu.addAction("Drop Option 2")
	QtMresult = QtdropMenu.exec_(Qwindow.mapToGlobal(d[0].pos()))
	return None

oQtApp = QApplication(sys.argv)

Qwindow = QMainWindow()

Qwindow.setWindowFlags(Qt.Window | Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
Qwindow.setWindowTitle("dropZone")
Qwindow.setAcceptDrops(True)

Qwindow.resize(140,100)
Qwindow.dragEnterEvent   = f_drop
Qwindow.dropEvent        = f_drop
Qwindow.contextMenuEvent = f_winMenu

Qwindow.show()
oQtApp.exec_()

quit()

SOBR - Szare Okno Bez Ramek
Robiąc dropa na to SOBR np. jakiejś ikony, otwiera dropMenu w oknie (na obrazku dropMenu). Prawy przycisk na tym SOBR otwiera menu bez ramek (winMenu), a następnie, ponowny drop i jest dropMenu bez ramek tak jak być powinno.

Czy zna ktoś jakieś rozwiązanie dla takiego "brzydkiego" dla mnie problemu?

Radek Glebicki

screenshot-20260510045140.png
screenshot-20260510045023.png
screenshot-20260510044538.png

Radosław Głębicki
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Sardine, Italy
  • Postów: 192
2

Dobra znalazłem. Dla:
dropMenu = Qmenu()
trzeba:
dropMenu.setWindowFlags(Qt.FramelessWindowHint | Qt.Popup)
te Qt.Popup jest tu istotne.

Działa.
Radek Glebicki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.