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
Мобильная версия