У меня есть созданный графический интерфейс в PyQt5. У меня есть 1 текущий виджет и другие, которые скоро появятся, и я хочу добавить его в свой графический интерфейс. Тем не менее, я не могу найти способ выставить их, как я хочу. Я использую такие вещи, как макеты сетки, но они допускают только «заблокированные» места, т.е. (0,1) (1,0) (1,1), я не думаю, что они позволяют вам просто использовать такие вещи, как move () для расположите элементы.
Я уже пробовал, как уже упоминалось, QGridLayout, QHBoxLayout и QVBoxLayout. Я также пробовал группы.
import sys
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Settings():
SCENE_SIZE_X = 1200
SCENE_SIZE_Y = 900
GRID_COUNT_X = 4
GRID_COUNT_Y = 5
GRID_BOX_WIDTH = 100
GRID_BOX_HEIGHT = 100
class Grid(QtWidgets.QGraphicsScene):
def __init__(self):
super().__init__()
self.lines = []
self.scrolled = 0
self.initUI()
def initUI(self):
self.draw_grid(Settings.GRID_COUNT_X, Settings.GRID_COUNT_Y, Settings.GRID_BOX_WIDTH, Settings.GRID_BOX_HEIGHT)
self.set_opacity(1.0)
def draw_grid(self, x_count, y_count, x_size, y_size):
width = x_count * x_size
height = y_count * y_size
self.setSceneRect(0, 0, width, height)
self.setItemIndexMethod(QtWidgets.QGraphicsScene.NoIndex)
pen = QPen(QColor(0,0,0), 1, Qt.SolidLine)
for x in range(0,x_count+1):
xc = x * x_size
self.lines.append(self.addLine(xc,0,xc,height,pen))
self.addText
for y in range(0,y_count+1):
yc = y * y_size
self.lines.append(self.addLine(0,yc,width,yc,pen))
def set_opacity(self,opacity):
for line in self.lines:
line.setOpacity(opacity)
def delete_grid(self):
for line in self.lines:
self.removeItem(line)
del self.lines[:]
def wheelEvent(self,event):
self.scrolled += event.delta()/90
if(self.scrolled > -30.0):
self.delete_grid()
self.draw_grid(Settings.GRID_COUNT_X, Settings.GRID_COUNT_Y, Settings.GRID_BOX_WIDTH + self.scrolled, Settings.GRID_BOX_HEIGHT + self.scrolled)
else:
self.scrolled = -30.0
class App(QtWidgets.QDialog):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 100, Settings.SCENE_SIZE_X, Settings.SCENE_SIZE_Y)
grid = QtWidgets.QGraphicsView(Grid())
layout = QGridLayout(self)
layout.addWidget(grid, 0, 1)
layout.addWidget(QtWidgets.QPushButton("hello!"), 0, 0)
layout.setRowStretch(2, 1)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setStyle("Fusion")
ex = App()
ex.show()
sys.exit(app.exec_())
Я заставляю элементы отображаться, но не там, где я хочу, чтобы они находились, поскольку я использую макеты.
Как я уже говорил, я пробовал группы, и они вроде работали. Я все понял правильно, но это выглядело грязно, поскольку внутри групп, внутри групп были виджеты:
![Picture of me trying groups](https://i.stack.imgur.com/e1Oob.png)
Каков наилучший способ разрешить мне расположить их, возможно, с точностью до одного пикселя, то есть с помощью move ()?
Спасибо,
Мечта
РЕДАКТИРОВАТЬ: код и изображение не выстраиваются в линию, потому что это была старая итерация кода