Как нарисовать линии над виджетами, содержащимися в макетеPython

Программы на Python
Ответить
Anonymous
 Как нарисовать линии над виджетами, содержащимися в макете

Сообщение Anonymous »

Windows 11 Pro
PyQt6 (последняя версия)
Python 3.13.1
Надеюсь, это будет легко. У меня есть следующий код:
import sys
from PyQt6.QtCore import QSize, Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
# Subclass QMainWindow to customize your application's main window
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
layout = QVBoxLayout()

button1 = QPushButton("Press Me!")
button1.setFixedSize(QSize(200, 60))
button2 = QPushButton("Press Me!")
button2.setFixedSize(QSize(200, 60))
button3 = QPushButton("Press Me!")
button3.setFixedSize(QSize(200, 60))
layout.addWidget(button1)
layout.addWidget(button2)
layout.addWidget(button3)
widget = QWidget()
widget.setLayout(layout)
#self.setFixedSize(QSize(100, 100))
# Set the central widget of the Window.
self.setCentralWidget(widget)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

Он запускается и выдаёт следующее:
Изображение

Я хочу сделать это:
[img]https://i.sstatic.net /oJuyhbZA.png[/img]

Я нашел код ниже, и он выводит строку. Но я не могу понять, как объединить этот код с приведенным выше кодом. Это всего лишь пример. Если бы я мог придумать, как заставить его рисовать линии поверх виджетов, я мог бы взять это оттуда. На данный момент у меня есть два требования.
Если это возможно, мне нужен интегрированный код, позволяющий рисовать линии, охватывающие несколько виджетов. Кроме того, в будущем я хочу иметь триггер событий (например, нажатие кнопки), который вызывал бы функцию, которая рисовала бы линию над несколькими виджетами в моем главном окне.
import sys
from PyQt6 import QtCore, QtGui, QtWidgets, uic
from PyQt6.QtCore import Qt

class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()

self.label = QtWidgets.QLabel()
canvas = QtGui.QPixmap(400, 300)
canvas.fill(Qt.GlobalColor.white)
self.label.setPixmap(canvas)
self.setCentralWidget(self.label)
self.draw_something()

def draw_something(self):
canvas = self.label.pixmap()
painter = QtGui.QPainter(canvas)
painter.drawLine(10, 10, 300, 200)
painter.end()
self.label.setPixmap(canvas)

app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()


Подробнее здесь: https://stackoverflow.com/questions/793 ... n-a-layout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»