如何避免在 PyQt5 中同时打开 windows?
How to avoid both windows open in PyQt5?
使用我的第一个脚本,我根据需要创建布局。现在我想在第二个脚本中使用这个布局并将小部件添加到框架中。面临以下问题:第一个和第二个程序windows 将同时打开,我只想打开/显示我的第二个程序window。如何解决?
第一个脚本
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QApplication, QFrame, QHBoxLayout, QSizePolicy
class MsgBox111(QWidget):
def __init__(self):
super().__init__()
self.frame_main = QFrame()
self.frame_main.setObjectName("ob_frame_main")
self.frame_main.setStyleSheet("QFrame#ob_frame_main{background-color:green}")
self.frame_left_top = QFrame()
self.frame_left_top.setObjectName("ob_frame_left_top")
self.frame_left_top.setStyleSheet("QFrame#ob_frame_left_top{background-color:skyblue}")
self.frame_left_top.setMinimumSize(600, 340)
self.frame_left_bot = QFrame()
self.frame_left_bot.setObjectName("ob_frame_left_bot")
self.frame_left_bot.setStyleSheet("QFrame#ob_frame_left_bot{background-color:lightgreen}")
self.frame_left_bot.setFixedSize(600, 60)
self.frame_right = QFrame()
self.frame_right.setObjectName("ob_frame_right")
self.frame_right.setStyleSheet("QFrame#ob_frame_right{background-color:rgb(230,220,150)}")
self.frame_right.setFixedSize(200, 405)
self.lay_main = QHBoxLayout()
self.lay_main.setContentsMargins(0, 0, 0, 0)
self.lay_main.setSpacing(8)
self.lay_left = QVBoxLayout()
self.lay_left.setSpacing(8)
self.lay_left_top = QVBoxLayout()
self.lay_left_top.setContentsMargins(0, 0, 0, 0)
self.lay_left_bot = QHBoxLayout()
self.lay_left_bot.setContentsMargins(0, 0, 0, 0)
self.lay_right = QVBoxLayout()
self.lay_right.setContentsMargins(0, 0, 0, 0)
self.lay_overall = QHBoxLayout()
self.lay_overall.setContentsMargins(0, 0, 0, 0)
self.lay_overall.setSpacing(5)
self.lay_left_top = QVBoxLayout(self.frame_left_top)
self.lay_left_bot = QHBoxLayout(self.frame_left_bot)
self.lay_right = QVBoxLayout(self.frame_right)
self.lay_main = QHBoxLayout(self.frame_main)
self.lay_left.addWidget(self.frame_left_top)
self.lay_left.addWidget(self.frame_left_bot)
self.lay_main.addLayout(self.lay_left)
self.lay_main.addWidget(self.frame_right)
self.lay_overall.addWidget(self.frame_main)
self.setLayout(self.lay_overall)
frame_right_sizehint = self.lay_left.sizeHint()
self.frame_right.setFixedSize(260, frame_right_sizehint.height())
self.frame_main.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
第二个脚本
import sys
from PyQt5.QtWidgets import QLineEdit
from layour_sample_001 import *
class MsgBox222(QWidget):
def __init__(self):
super().__init__()
self.ss = MsgBox111()
self.ss.show()
self.tb = QLineEdit()
self.ss.lay_left.addWidget(self.tb)
self.ss.setLayout(self.ss.lay_left)
if __name__ == "__main__":
app = QApplication(sys.argv)
mainwindow = MsgBox222()
mainwindow.show()
sys.exit(app.exec_())
你需要正确的subclass.
在为 superclass 调用 __init__
之后,您可以访问那个 class 和实例的所有继承属性:您有一个完全构建的 MsgBox111
实例,然后您可以根据满足您的需求。
classMsgBox222(<b>MsgBox111</b>):
def __init__(自我):
超级().__init__()
self.tb = QLineEdit()
<b>self.lay_left</b>.addWidget(self.tb)
我强烈建议你对OOP的主要方面做更多的研究和仔细研究,包括classes、实例、继承、属性和子classing,因为必须了解这些基本主题。
使用我的第一个脚本,我根据需要创建布局。现在我想在第二个脚本中使用这个布局并将小部件添加到框架中。面临以下问题:第一个和第二个程序windows 将同时打开,我只想打开/显示我的第二个程序window。如何解决?
第一个脚本
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QApplication, QFrame, QHBoxLayout, QSizePolicy
class MsgBox111(QWidget):
def __init__(self):
super().__init__()
self.frame_main = QFrame()
self.frame_main.setObjectName("ob_frame_main")
self.frame_main.setStyleSheet("QFrame#ob_frame_main{background-color:green}")
self.frame_left_top = QFrame()
self.frame_left_top.setObjectName("ob_frame_left_top")
self.frame_left_top.setStyleSheet("QFrame#ob_frame_left_top{background-color:skyblue}")
self.frame_left_top.setMinimumSize(600, 340)
self.frame_left_bot = QFrame()
self.frame_left_bot.setObjectName("ob_frame_left_bot")
self.frame_left_bot.setStyleSheet("QFrame#ob_frame_left_bot{background-color:lightgreen}")
self.frame_left_bot.setFixedSize(600, 60)
self.frame_right = QFrame()
self.frame_right.setObjectName("ob_frame_right")
self.frame_right.setStyleSheet("QFrame#ob_frame_right{background-color:rgb(230,220,150)}")
self.frame_right.setFixedSize(200, 405)
self.lay_main = QHBoxLayout()
self.lay_main.setContentsMargins(0, 0, 0, 0)
self.lay_main.setSpacing(8)
self.lay_left = QVBoxLayout()
self.lay_left.setSpacing(8)
self.lay_left_top = QVBoxLayout()
self.lay_left_top.setContentsMargins(0, 0, 0, 0)
self.lay_left_bot = QHBoxLayout()
self.lay_left_bot.setContentsMargins(0, 0, 0, 0)
self.lay_right = QVBoxLayout()
self.lay_right.setContentsMargins(0, 0, 0, 0)
self.lay_overall = QHBoxLayout()
self.lay_overall.setContentsMargins(0, 0, 0, 0)
self.lay_overall.setSpacing(5)
self.lay_left_top = QVBoxLayout(self.frame_left_top)
self.lay_left_bot = QHBoxLayout(self.frame_left_bot)
self.lay_right = QVBoxLayout(self.frame_right)
self.lay_main = QHBoxLayout(self.frame_main)
self.lay_left.addWidget(self.frame_left_top)
self.lay_left.addWidget(self.frame_left_bot)
self.lay_main.addLayout(self.lay_left)
self.lay_main.addWidget(self.frame_right)
self.lay_overall.addWidget(self.frame_main)
self.setLayout(self.lay_overall)
frame_right_sizehint = self.lay_left.sizeHint()
self.frame_right.setFixedSize(260, frame_right_sizehint.height())
self.frame_main.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
第二个脚本
import sys
from PyQt5.QtWidgets import QLineEdit
from layour_sample_001 import *
class MsgBox222(QWidget):
def __init__(self):
super().__init__()
self.ss = MsgBox111()
self.ss.show()
self.tb = QLineEdit()
self.ss.lay_left.addWidget(self.tb)
self.ss.setLayout(self.ss.lay_left)
if __name__ == "__main__":
app = QApplication(sys.argv)
mainwindow = MsgBox222()
mainwindow.show()
sys.exit(app.exec_())
你需要正确的subclass.
在为 superclass 调用 __init__
之后,您可以访问那个 class 和实例的所有继承属性:您有一个完全构建的 MsgBox111
实例,然后您可以根据满足您的需求。
classMsgBox222(<b>MsgBox111</b>):
def __init__(自我):
超级().__init__()
self.tb = QLineEdit()
<b>self.lay_left</b>.addWidget(self.tb)
我强烈建议你对OOP的主要方面做更多的研究和仔细研究,包括classes、实例、继承、属性和子classing,因为必须了解这些基本主题。