Я повторяю этот вопрос с гораздо лучшим примером кода.
Приведенный ниже код в его текущей форме будет отображать зеленую затененную QWidget
в окне, что я и хочу. Однако при комментировании строки:
self.widget = QWidget(self.centralwidget)
и комментарий,
self.widget = Widget_1(self.centralwidget)
зеленое поле не отображается. Класс Widget_1
- это простой подкласс QWidget
, поэтому я пытаюсь обернуть голову там, где происходит срыв. Нет сообщений об ошибках, и строка print("Test")
в классе Widget_1
выводит очень хорошо, поэтому я знаю, что все вызывается правильно.
Я не собираюсь использовать какие-либо типы автоматических макетов по причинам, которые мне не нужны. Можете ли вы помочь мне понять, почему зеленый прямоугольник не отображается, и какую коррекцию мне нужно будет сделать, чтобы использовать класс Widget_1
?
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
from PyQt5.QtCore import QRect
import sys
class Main_Window(object):
def setupUi(self, seating_main_window):
seating_main_window.setObjectName("seating_main_window")
seating_main_window.setEnabled(True)
seating_main_window.resize(400, 400)
self.centralwidget = QWidget(seating_main_window)
self.centralwidget.setObjectName("centralwidget")
########### The following two lines of code are causing the confusion #######
# The following line, when uncommented, creates a shaded green box in a window
self.widget = QWidget(self.centralwidget) # Working line
# The next line does NOT create the same shaded green box. Where is it breaking?
# self.widget = Widget_1(self.centralwidget) # Non-working line
self.widget.setGeometry(QRect(15, 150, 60, 75))
self.widget.setAutoFillBackground(False)
self.widget.setStyleSheet("background: rgb(170, 255, 0)")
self.widget.setObjectName("Widget1")
seating_main_window.setCentralWidget(self.centralwidget)
class Widget_1(QWidget):
def __init__(self, parent=None):
super().__init__()
self.setMinimumSize(10, 30) # I put this in thinking maybe I just couldn't see it
print("Test") # I see this output when run when Widget_1 is used above
class DemoApp(QMainWindow, Main_Window):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == '__main__': # if we're running file directly and not importing it
app = QApplication(sys.argv) # A new instance of QApplication
form = DemoApp() # We set the form to be our ExampleApp (design)
form.show() # Show the form
app.exec_() # run the main function