[英]PyQt5 QWidget not filling parent
我正在PyQt5中創建代碼編輯器。 我在中心小部件中使用QGridLayout並從那里構建UI。 我面臨的問題是QPlainTextEdit和菜單不能填充中心小部件上的可用空間。 我嘗試將大小策略設置為擴展,並嘗試調整QGridLayout的拉伸參數。
我正在python 2.7和PyQt 5中運行代碼。使用PyCharm IDE。
Main.py
import os
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QAction
from PyQt5.QtGui import QIcon
import UI
versao = '3.0.0'
class Principal(QMainWindow):
def __init__(self):
super(Principal, self).__init__()
self.acao_novo = 0
self.acao_abrir = 0
self.acao_exemplos = 0
self.acao_sair = 0
self.acao_salvar = 0
self.acao_salvar_como = 0
self.acao_comentar_linha = 0
self.acao_achar = 0
self.acao_achar_e_substituir = 0
self.acao_ir_para_linha = 0
self.acao_placa = 0
self.acao_porta = 0
self.acao_lingua = 0
self.acao_monitor_serial = 0
self.acao_verificar = 0
self.acao_verificar_e_carregar = 0
self.init_ui()
def init_ui(self):
self.setCentralWidget(UI.Centro())
self.setGeometry(300, 300, 500, 550)
self.setWindowTitle('Br.ino ' + versao)
self.setWindowIcon(QIcon(os.path.join('recursos', 'logo.png')))
self.show()
def main():
app = QApplication(sys.argv)
principal = Principal()
app.setStyleSheet("""QMainWindow {
background: '#252525';
}
QMenu{
background: '#252525';
}
QMenu::item {
background: '#252525';
}
QMenu::item:selected{
background: '#101010';
}
QMenuBar {
background: '#252525';
}
QMenuBar::item {
background: '#252525';
}
QMenuBar::item:selected{
background: '#101010';
}
QPlainTextEdit{
background: '#252525';
border: None;
border-radius: 6px;
color: '#efefef';
selection-background-color: '#454545';
}""")
sys.exit(app.exec_())
if __name__ == '__main__':
main()
UI.py
from PyQt5.QtWidgets import (QWidget, QGridLayout, QPlainTextEdit, QVBoxLayout, QSpacerItem, QSizePolicy, QAbstractButton)
import os
from PyQt5.QtGui import QPixmap, QPainter
from PyQt5.QtCore import QSize
class Centro(QWidget):
def __init__(self):
super(Centro, self).__init__()
self.layout = 0
self.init_ui()
def init_ui(self):
layout = QGridLayout(self)
layout.setRowStretch(0, 7.5)
layout.setRowStretch(1, 2.5)
layout.setColumnStretch(0, 1)
layout.setColumnStretch(1, 5)
menu = Menu.Menu()
layout.addWidget(menu, 0, 0, 1, 0)
layout.setSpacing(10)
layout.setContentsMargins(0, 0, 0, 0)
container = QWidget(self)
container.setStyleSheet("background:#252525")
editor = QPlainTextEdit(container)
layout.addWidget(container, 0, 1, 9, 9)
container_log = QWidget(self)
log = QPlainTextEdit(container_log)
log.setStyleSheet("background:#000000")
log.setDisabled(True)
layout.addWidget(container_log, 1, 1, 1, 8)
self.show()
class Menu(QWidget):
def __init__(self):
super(Menu, self).__init__()
self.layout = 0
self.init_ui()
def init_ui(self):
container = QWidget(self)
container.setFixedWidth(60)
layout = QVBoxLayout(container)
container.setStyleSheet("background-color: '#5cb50d';")
btn_compilar = botaoImagem(QPixmap(os.path.join('recursos', 'compilarFoco.png')), self)
btn_compilar_e_carregar = botaoImagem(QPixmap(os.path.join('recursos', 'carregarFoco.png')), self)
btn_novo = botaoImagem(QPixmap(os.path.join('recursos', 'novoArquivoFoco.png')), self)
btn_abrir = botaoImagem(QPixmap(os.path.join('recursos', 'abrirPastaFoco.png')), self)
btn_salvar = botaoImagem(QPixmap(os.path.join('recursos', 'salvarFoco.png')), self)
btn_monitor_serial = botaoImagem(QPixmap(os.path.join('recursos', 'monitorSerialFoco.png')), self)
btn_monitor_serial.setFixedSize(50, 50)
layout.setContentsMargins(5, 5, 5, 0)
espacador_vertical = QSpacerItem(0, 500000000, QSizePolicy.Minimum, QSizePolicy.Expanding)
layout.addWidget(btn_compilar)
layout.addWidget(btn_compilar_e_carregar)
layout.addWidget(btn_novo)
layout.addWidget(btn_abrir)
layout.addWidget(btn_salvar)
layout.addWidget(btn_monitor_serial)
layout.addItem(espacador_vertical)
self.show()
class botaoImagem(QAbstractButton):
def __init__(self, pixmap, parent=None):
super(botaoImagem, self).__init__(parent)
self.pixmap = pixmap
def paintEvent(self, event):
painter = QPainter(self)
painter.drawPixmap(event.rect(), self.pixmap)
def sizeHint(self):
return QSize(50, 63)
不要創建“容器”小部件,不需要它們。 將小部件直接添加到布局中。
您的問題是,盡管您正在設置布局,但是您是將容器小部件添加到沒有布局的父級中,因此容器無法縮放。
即與
container = QWidget(self)
container.setStyleSheet("background:#252525")
editor = QPlainTextEdit(container)
layout.addWidget(container, 0, 1, 9, 9)
寫
editor = QPlainTextEdit(self)
editor.setStyleSheet("background:#252525")
layout.addWidget(editor, 0, 1, 9, 9)
更新:這是Menu
layout = QVBoxLayout(self)
self.setFixedWidth(60)
self.setStyleSheet("background-color: '#5cb50d';")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.