class ForecastSingleDouble(QMainWindow): def __init__(self): super().__init__() # 开奖号码部分 # 标签部分 self.label_lottery_number = QLabel(r'开奖号码', self) self.label_lottery_wan = QLabel(r'万位', self) self.label_lottery_thousand = QLabel(r'千位', self) self.label_lottery_hundred = QLabel(r'百位', self) self.label_lottery_ten = QLabel(r'十位', self) self.label_lottery_unit = QLabel(r'个位', self) # 输入文本框部分 self.lineEdit_lottery_wan = QLineEdit(self) self.lineEdit_lottery_thousand = QLineEdit(self) self.lineEdit_lottery_hundred = QLineEdit(self) self.lineEdit_lottery_ten = QLineEdit(self) self.lineEdit_lottery_unit = QLineEdit(self) # 获取开奖号码按钮部分 self.pushButton_get_lottery_number = QPushButton(r'获取开奖号码', self) # 预测号码部分 # 预测位数标签 self.label_forecast_wan = QLabel(r'万位单双', self) self.label_forecast_thousand = QLabel(r'千位单双', self) self.label_forecast_hundred = QLabel(r'百位单双', self) self.label_forecast_ten = QLabel(r'十位单双', self) self.label_forecast_unit = QLabel(r'个位单双', self) # 预测单双的标签 # 万位预测单双 self.label_forecast_wan_single = QLabel(r'单', self) self.label_forecast_wan_double = QLabel(r'双', self) # 千位预测单双 self.label_forecast_thousand_single = QLabel(r'单', self) self.label_forecast_thousand_double = QLabel(r'双', self) # 百位预测单双 self.label_forecast_hundred_single = QLabel(r'单', self) self.label_forecast_hundred_double = QLabel(r'双', self) # 十位预测单双 self.label_forecast_ten_single = QLabel(r'单', self) self.label_forecast_ten_double = QLabel(r'双', self) # 个位预测单双 self.label_forecast_unit_single = QLabel(r'单', self) self.label_forecast_unit_double = QLabel(r'双', self) # 预测准确率的输入文本框 # 万位预测号码 self.lineEdit_forecast_wan_single_ratio = QLineEdit(self) self.lineEdit_forecast_wan_double_ratio = QLineEdit(self) # 千位预测号码 self.lineEdit_forecast_thousand_single_ratio = QLineEdit(self) self.lineEdit_forecast_thousand_double_ratio = QLineEdit(self) # 百位预测号码 self.lineEdit_forecast_hundred_single_ratio = QLineEdit(self) self.lineEdit_forecast_hundred_double_ratio = QLineEdit(self) # 十位预测号码 self.lineEdit_forecast_ten_single_ratio = QLineEdit(self) self.lineEdit_forecast_ten_double_ratio = QLineEdit(self) # 个位预测号码 self.lineEdit_forecast_unit_single_ratio = QLineEdit(self) self.lineEdit_forecast_unit_double_ratio = QLineEdit(self) # 预测号码按钮 self.pushButton_forecast_single_double = QPushButton(r'预测开奖单双', self) # 在线投注部分 # 标签部分 self.label_website = QLabel(r'购彩网址', self) self.label_user_name = QLabel(r'用户名', self) self.label_user_password = QLabel(r'密码', self) self.label_start_money = QLabel(r'初始资金', self) self.label_stop_money = QLabel(r'止损金额', self) self.label_current_lottery_time = QLabel(r'当前投注倍数', self) self.label_current_lottery_money = QLabel(r'当前投注金额', self) self.label_history_max_wrong_time = QLabel(r'最单错误次数', self) self.label_history_max_lottery_money = QLabel(r'最单投注金额', self) self.label_profit_money = QLabel(r'当前盈利金额', self) self.label_lottery_bet_mode = QLabel(r'投注模式', self) self.label_lottery_risk_mode = QLabel(r'风险模式', self) self.label_lottery_follow_mode = QLabel(r'跟号模式', self) self.label_lottery_buy_number_mode = QLabel(r'购号模式', self) # 输入文本框 self.lineEdit_website = QLineEdit(self) self.lineEdit_user_name = QLineEdit(self) self.lineEdit_user_password = QLineEdit(self) self.lineEdit_start_money = QLineEdit(self) self.lineEdit_stop_money = QLineEdit(self) self.lineEdit_current_lottery_time = QLineEdit(self) self.lineEdit_current_lottery_money = QLineEdit(self) self.lineEdit_history_max_wrong_time = QLineEdit(self) self.lineEdit_history_max_lottery_money = QLineEdit(self) self.lineEdit_profit_money = QLineEdit(self) # 投注模式 self.buttonGroup_buy_unit = QButtonGroup(self) self.radioButton_buy_yuan = QRadioButton(r'元', self) self.buttonGroup_buy_unit.addButton(self.radioButton_buy_yuan, 11) self.radioButton_buy_corner = QRadioButton(r'角', self) self.buttonGroup_buy_unit.addButton(self.radioButton_buy_corner, 12) self.radioButton_buy_cent = QRadioButton(r'分', self) self.buttonGroup_buy_unit.addButton(self.radioButton_buy_cent, 13) # 风险模式 self.buttonGroup_risk = QButtonGroup(self) self.radioButton_low_risk = QRadioButton(r'低风险投资模式', self) self.buttonGroup_risk.addButton(self.radioButton_low_risk, 21) self.radioButton_medium_risk = QRadioButton(r'中风险投资模式', self) self.buttonGroup_risk.addButton(self.radioButton_medium_risk, 22) self.radioButton_high_risk = QRadioButton(r'高风险投资模式', self) self.buttonGroup_risk.addButton(self.radioButton_high_risk, 23) # 预测号码的个数 self.buttonGroup_forecast_bit = QButtonGroup(self) self.radioButton_forecast_four_bit = QRadioButton(r'四码', self) self.buttonGroup_forecast_bit.addButton( self.radioButton_forecast_four_bit, 31) self.radioButton_forecast_five_bit = QRadioButton(r'五码', self) self.buttonGroup_forecast_bit.addButton( self.radioButton_forecast_five_bit, 32) self.radioButton_forecast_six_bit = QRadioButton(r'六码', self) self.buttonGroup_forecast_bit.addButton( self.radioButton_forecast_six_bit, 33) self.radioButton_forecast_seven_bit = QRadioButton(r'七码', self) self.buttonGroup_forecast_bit.addButton( self.radioButton_forecast_seven_bit, 34) # 追号期数 self.buttonGroup_forecast_period = QButtonGroup(self) self.radioButton_forecast_one_period = QRadioButton(r'一期', self) self.buttonGroup_forecast_period.addButton( self.radioButton_forecast_one_period, 41) self.radioButton_forecast_two_period = QRadioButton(r'二期', self) self.buttonGroup_forecast_period.addButton( self.radioButton_forecast_two_period, 42) self.radioButton_forecast_three_period = QRadioButton(r'三期', self) self.buttonGroup_forecast_period.addButton( self.radioButton_forecast_three_period, 43) self.radioButton_forecast_four_period = QRadioButton(r'四期', self) self.buttonGroup_forecast_period.addButton( self.radioButton_forecast_four_period, 44) self.radioButton_forecast_five_period = QRadioButton(r'五期', self) self.buttonGroup_forecast_period.addButton( self.radioButton_forecast_five_period, 45) # 在线投注按钮 self.pushButton_purchase_lottery = QPushButton(r'自动在线投注', self) # 初始化界面 self.initialize() def initialize(self): # 开奖号码部分 self.label_lottery_number.setFixedSize(60, 25) self.label_lottery_number.move(10, 5) self.label_lottery_wan.setFixedSize(50, 25) self.label_lottery_wan.move(80, 5) self.label_lottery_wan.setAlignment(Qt.AlignCenter) self.label_lottery_thousand.setFixedSize(50, 25) self.label_lottery_thousand.move(200, 5) self.label_lottery_thousand.setAlignment(Qt.AlignCenter) self.label_lottery_hundred.setFixedSize(50, 25) self.label_lottery_hundred.move(320, 5) self.label_lottery_hundred.setAlignment(Qt.AlignCenter) self.label_lottery_ten.setFixedSize(50, 25) self.label_lottery_ten.move(440, 5) self.label_lottery_ten.setAlignment(Qt.AlignCenter) self.label_lottery_unit.setFixedSize(50, 25) self.label_lottery_unit.move(560, 5) self.label_lottery_unit.setAlignment(Qt.AlignCenter) self.lineEdit_lottery_wan.setFixedSize(50, 25) self.lineEdit_lottery_wan.move(140, 5) self.lineEdit_lottery_thousand.setFixedSize(50, 25) self.lineEdit_lottery_thousand.move(260, 5) self.lineEdit_lottery_hundred.setFixedSize(50, 25) self.lineEdit_lottery_hundred.move(380, 5) self.lineEdit_lottery_ten.setFixedSize(50, 25) self.lineEdit_lottery_ten.move(500, 5) self.lineEdit_lottery_unit.setFixedSize(50, 25) self.lineEdit_lottery_unit.move(620, 5) # 获取开奖号码 self.pushButton_get_lottery_number.setFixedSize(110, 25) self.pushButton_get_lottery_number.move(290, 35) # 预测号码部分 # 万位部分 self.label_forecast_wan.setFixedSize(60, 25) self.label_forecast_wan.move(10, 65) self.label_forecast_wan_single.setFixedSize(50, 25) self.label_forecast_wan_single.move(200, 65) self.label_forecast_wan_single.setAlignment(Qt.AlignCenter) self.lineEdit_forecast_wan_single_ratio.setFixedSize(50, 25) self.lineEdit_forecast_wan_single_ratio.move(260, 65) self.label_forecast_wan_double.setFixedSize(50, 25) self.label_forecast_wan_double.move(440, 65) self.label_forecast_wan_double.setAlignment(Qt.AlignCenter) self.lineEdit_forecast_wan_double_ratio.setFixedSize(50, 25) self.lineEdit_forecast_wan_double_ratio.move(500, 65) # 千位部分 self.label_forecast_thousand.setFixedSize(60, 25) self.label_forecast_thousand.move(10, 95) self.label_forecast_thousand_single.setFixedSize(50, 25) self.label_forecast_thousand_single.move(200, 95) self.label_forecast_thousand_single.setAlignment(Qt.AlignCenter) self.lineEdit_forecast_thousand_single_ratio.setFixedSize(50, 25) self.lineEdit_forecast_thousand_single_ratio.move(260, 95) self.label_forecast_thousand_double.setFixedSize(50, 25) self.label_forecast_thousand_double.move(440, 95) self.label_forecast_thousand_double.setAlignment(Qt.AlignCenter) self.lineEdit_forecast_thousand_double_ratio.setFixedSize(50, 25) self.lineEdit_forecast_thousand_double_ratio.move(500, 95) # 百位部分 self.label_forecast_hundred.setFixedSize(60, 25) self.label_forecast_hundred.move(10, 125) self.label_forecast_hundred_single.setFixedSize(50, 25) self.label_forecast_hundred_single.move(200, 125) self.label_forecast_hundred_single.setAlignment(Qt.AlignCenter) self.lineEdit_forecast_hundred_single_ratio.setFixedSize(50, 25) self.lineEdit_forecast_hundred_single_ratio.move(260, 125) self.label_forecast_hundred_double.setFixedSize(50, 25) self.label_forecast_hundred_double.move(440, 125) self.label_forecast_hundred_double.setAlignment(Qt.AlignCenter) self.lineEdit_forecast_hundred_double_ratio.setFixedSize(50, 25) self.lineEdit_forecast_hundred_double_ratio.move(500, 125) # 十位部分 self.label_forecast_ten.setFixedSize(60, 25) self.label_forecast_ten.move(10, 155) self.label_forecast_ten_single.setFixedSize(50, 25) self.label_forecast_ten_single.move(200, 155) self.label_forecast_ten_single.setAlignment(Qt.AlignCenter) self.lineEdit_forecast_ten_single_ratio.setFixedSize(50, 25) self.lineEdit_forecast_ten_single_ratio.move(260, 155) self.label_forecast_ten_double.setFixedSize(50, 25) self.label_forecast_ten_double.move(440, 155) self.label_forecast_ten_double.setAlignment(Qt.AlignCenter) self.lineEdit_forecast_ten_double_ratio.setFixedSize(50, 25) self.lineEdit_forecast_ten_double_ratio.move(500, 155) # 个位部分 self.label_forecast_unit.setFixedSize(60, 25) self.label_forecast_unit.move(10, 185) self.label_forecast_unit_single.setFixedSize(50, 25) self.label_forecast_unit_single.move(200, 185) self.label_forecast_unit_single.setAlignment(Qt.AlignCenter) self.lineEdit_forecast_unit_single_ratio.setFixedSize(50, 25) self.lineEdit_forecast_unit_single_ratio.move(260, 185) self.label_forecast_unit_double.setFixedSize(50, 25) self.label_forecast_unit_double.move(440, 185) self.label_forecast_unit_double.setAlignment(Qt.AlignCenter) self.lineEdit_forecast_unit_double_ratio.setFixedSize(50, 25) self.lineEdit_forecast_unit_double_ratio.move(500, 185) self.pushButton_forecast_single_double.setFixedSize(110, 25) self.pushButton_forecast_single_double.move(290, 215) # 在线投注部分 # 设置用户信息与购买信息 self.label_website.setFixedSize(60, 25) self.label_website.move(10, 245) self.lineEdit_website.setFixedSize(110, 25) self.lineEdit_website.move(80, 245) self.label_user_name.setFixedSize(50, 25) self.label_user_name.move(200, 245) self.label_user_name.setAlignment(Qt.AlignCenter) self.lineEdit_user_name.setFixedSize(50, 25) self.lineEdit_user_name.move(260, 245) self.label_user_password.setFixedSize(50, 25) self.label_user_password.move(320, 245) self.label_user_password.setAlignment(Qt.AlignCenter) self.lineEdit_user_password.setFixedSize(50, 25) self.lineEdit_user_password.move(380, 245) self.label_start_money.setFixedSize(50, 25) self.label_start_money.move(440, 245) self.label_start_money.setAlignment(Qt.AlignCenter) self.lineEdit_start_money.setFixedSize(50, 25) self.lineEdit_start_money.move(500, 245) self.label_stop_money.setFixedSize(50, 25) self.label_stop_money.move(560, 245) self.label_stop_money.setAlignment(Qt.AlignCenter) self.lineEdit_stop_money.setFixedSize(50, 25) self.lineEdit_stop_money.move(620, 245) # 显示投注信息 self.label_current_lottery_time.setFixedSize(80, 25) self.label_current_lottery_time.move(10, 275) self.lineEdit_current_lottery_time.setFixedSize(40, 25) self.lineEdit_current_lottery_time.move(90, 275) self.label_current_lottery_money.setFixedSize(80, 25) self.label_current_lottery_money.move(140, 275) self.lineEdit_current_lottery_money.setFixedSize(40, 25) self.lineEdit_current_lottery_money.move(220, 275) self.label_history_max_wrong_time.setFixedSize(80, 25) self.label_history_max_wrong_time.move(270, 275) self.lineEdit_history_max_wrong_time.setFixedSize(40, 25) self.lineEdit_history_max_wrong_time.move(350, 275) self.label_history_max_lottery_money.setFixedSize(80, 25) self.label_history_max_lottery_money.move(400, 275) self.lineEdit_history_max_lottery_money.setFixedSize(40, 25) self.lineEdit_history_max_lottery_money.move(480, 275) self.label_profit_money.setFixedSize(80, 25) self.label_profit_money.move(530, 275) self.lineEdit_profit_money.setFixedSize(40, 25) self.lineEdit_profit_money.move(610, 275) # 设置用户购买方式 self.label_lottery_bet_mode.setFixedSize(60, 25) self.label_lottery_bet_mode.move(10, 305) self.radioButton_buy_yuan.setFixedSize(50, 25) self.radioButton_buy_yuan.move(80, 305) self.radioButton_buy_corner.setFixedSize(50, 25) self.radioButton_buy_corner.move(140, 305) self.radioButton_buy_cent.setFixedSize(50, 25) self.radioButton_buy_cent.move(200, 305) self.label_lottery_risk_mode.setFixedSize(60, 25) self.label_lottery_risk_mode.move(260, 305) self.radioButton_low_risk.setFixedSize(110, 25) self.radioButton_low_risk.move(320, 305) self.radioButton_medium_risk.setFixedSize(110, 25) self.radioButton_medium_risk.move(440, 305) self.radioButton_high_risk.setFixedSize(110, 25) self.radioButton_high_risk.move(560, 305) self.label_lottery_buy_number_mode.setFixedSize(60, 25) self.label_lottery_buy_number_mode.move(10, 335) self.radioButton_forecast_four_bit.setFixedSize(50, 25) self.radioButton_forecast_four_bit.move(80, 335) self.radioButton_forecast_five_bit.setFixedSize(50, 25) self.radioButton_forecast_five_bit.move(140, 335) self.radioButton_forecast_six_bit.setFixedSize(50, 25) self.radioButton_forecast_six_bit.move(200, 335) self.radioButton_forecast_seven_bit.setFixedSize(50, 25) self.radioButton_forecast_seven_bit.move(260, 335) self.label_lottery_follow_mode.setFixedSize(50, 25) self.label_lottery_follow_mode.move(320, 335) self.radioButton_forecast_one_period.setFixedSize(50, 25) self.radioButton_forecast_one_period.move(380, 335) self.radioButton_forecast_two_period.setFixedSize(50, 25) self.radioButton_forecast_two_period.move(440, 335) self.radioButton_forecast_three_period.setFixedSize(50, 25) self.radioButton_forecast_three_period.move(500, 335) self.radioButton_forecast_four_period.setFixedSize(50, 25) self.radioButton_forecast_four_period.move(560, 335) self.radioButton_forecast_five_period.setFixedSize(50, 25) self.radioButton_forecast_five_period.move(620, 335) # 在线购买彩票 self.pushButton_purchase_lottery.setFixedSize(110, 25) self.pushButton_purchase_lottery.move(290, 365) # 界面全局设置 self.setGeometry(500, 300, 680, 400) self.setWindowTitle(r'重庆时时彩预测单双软件')
def __init__(self, parent, name=None): super().__init__() self.parent = parent self.name = name self.cron_job = None self.layout = QHBoxLayout() self.setMovable(True) self.is_running = False self.is_enabled_checkbox = QCheckBox(self.name) self.num_tanks = 30 self.num_quantity = ["1", "2", "3", "4"] self.program_settings = { "Program_name": self.name, "Enabled": self.is_enabled_checkbox.isChecked(), "Type": "Feeding and washing", "Day": None, "Time": None, "Tanks": [None] * self.num_tanks } program_default = copy(self.program_settings) # Layout left self.left_layout = QVBoxLayout() self.left_layout.setAlignment(Qt.AlignTop) self.button_startstop = QPushButton("Run", self) self.button_startstop.setFixedSize(QtCore.QSize(100, 35)) self.button_startstop.setCheckable(True) self.button_startstop.clicked.connect(lambda: self.start_program()) self.button_reset = QPushButton("Reset", self) self.button_reset.setFixedSize(QtCore.QSize(100, 35)) self.button_reset.clicked.connect(lambda: self.reset(program_default)) self.button_reset.clicked.connect(lambda: self.repaint()) self.button_duplicate = QPushButton("Duplicate", self) self.button_duplicate.setFixedSize(QtCore.QSize(100, 35)) self.button_duplicate.clicked.connect(lambda: self.duplicate()) self.button_delete = QPushButton("Delete", self) self.button_delete.setFixedSize(QtCore.QSize(100, 35)) self.button_delete.clicked.connect(lambda: self.delete_tab()) self.first_button_row_layout = QHBoxLayout() self.first_button_row_layout.setAlignment(Qt.AlignLeft) self.first_button_row_layout.addWidget(self.button_startstop) self.first_button_row_layout.addWidget(self.button_reset) self.second_button_row_layout = QHBoxLayout() self.second_button_row_layout.setAlignment(Qt.AlignLeft) self.second_button_row_layout.addWidget(self.button_duplicate) self.second_button_row_layout.addWidget(self.button_delete) self.left_layout.addLayout(self.first_button_row_layout) self.left_layout.addLayout(self.second_button_row_layout) # Create a button group for feed & washing self.bgroup1_1 = QButtonGroup(self) # self.bgroup1_1.setExclusive(False) self.button_feeding = QRadioButton("Feeding and washing", self) self.button_feeding.setCheckable(True) self.button_feeding.setChecked(True) self.button_washing = QRadioButton("Only washing", self) # self.button_washing.setEnabled(False) self.button_washing.setCheckable(True) self.bgroup1_1.addButton(self.button_feeding, 1) self.bgroup1_1.addButton(self.button_washing, 2) self.bgroup1_1.buttonClicked.connect( lambda: self.record_log("Type", self.bgroup1_1)) # Create a group box for feeding & washing gpbox1_1 = QGroupBox("Program Type") grid = QVBoxLayout() grid.addWidget(self.button_feeding) grid.addWidget(self.button_washing) grid.setAlignment(Qt.AlignLeft) gpbox1_1.setLayout(grid) self.left_layout.addWidget(gpbox1_1) # Create a button group for day of week self.button_dow = [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'Everyday', ] self.bgroup1_2 = QButtonGroup(self) self.bgroup1_2.setExclusive(False) for id, name in enumerate(self.button_dow): button = QCheckBox(name, self) button.stateChanged.connect(lambda: self.update_active_days()) if name == 'Everyday': button.clicked.connect(lambda: self.check_everyday()) self.bgroup1_2.addButton(button, id) # adds each button to the layout gpbox1_2 = QGroupBox("Select day of week") gpbox1_2.setAlignment(Qt.AlignLeft) grid = QGridLayout() grid.setSpacing(5) for i, button in enumerate(self.bgroup1_2.buttons()): grid.addWidget(button, i % 4, i // 4) gpbox1_2.setLayout(grid) self.left_layout.addWidget(gpbox1_2) # Add time pulldown gpbox1_2_1 = QGroupBox("Select time") self.pd_time = QComboBox(self) for h in range(24): for m in range(2): self.pd_time.addItem( f'{h // 12 * 12 + h % 12} : {m * 30 :02d} {"AM" if h < 12 else "PM"}' ) self.pd_time.currentIndexChanged.connect(lambda: self.update_time()) self.update_time() gpbox1_2_1_layout = QVBoxLayout() gpbox1_2_1_layout.addWidget(self.pd_time) gpbox1_2_1.setLayout(gpbox1_2_1_layout) self.left_layout.addWidget(gpbox1_2_1) # Group box right # Box for food quantity ================================================= gpbox2 = QGroupBox("Food Quantity") gpbox2.setStyleSheet('QGroupBox:title {' 'subcontrol-origin: margin;' 'subcontrol-position: top center;' 'padding-left: 10px;' 'padding-right: 10px; }') gpbox2_layout = QVBoxLayout() gpbox2.setLayout(gpbox2_layout) gpbox2_1 = QGroupBox() grid = QGridLayout() grid.setSpacing(15) scroll = QScrollArea() scroll.setWidget(gpbox2_1) # scroll.setFixedWidth(470) scroll.setWidgetResizable(True) self.bgroup2_1 = QButtonGroup(self) # buttn gp of tank selecetion self.bgroup2_1.setExclusive(False) self.bgroup2_2 = [ ] # QButtonGroup(self) # buttn gp of food amount selecetion # Select/Unselect all tanks self.select_unselect_all_checkbox = QCheckBox(f'All Tanks', self) self.select_unselect_all_checkbox.toggled.connect( self.select_unselect_all_tanks) self.select_unselect_all_checkbox.setChecked(True) self.bgroup2_1.addButton(self.select_unselect_all_checkbox, 1) grid.addWidget(self.select_unselect_all_checkbox, 0, 0) bg = QButtonGroup(self) for j, name in enumerate(self.num_quantity): b = QRadioButton(name, self) b.setFixedSize(QtCore.QSize(40, 20)) b.setCheckable(True) bg.addButton(b, j + 1) grid.addWidget(b, 0, j + 1) bg.buttonClicked.connect(lambda: self.select_unselect_food_amount()) self.bgroup2_2.append(bg) # Populate tank rows for i in range(1, self.num_tanks + 1): cb = QCheckBox(f'Tank {i}', self) cb.setChecked(True) self.bgroup2_1.addButton(cb, i + 1) grid.addWidget(cb, i, 0) bg = QButtonGroup(self) for j, name in enumerate(self.num_quantity): b = QRadioButton(name, self) b.setFixedSize(QtCore.QSize(40, 20)) b.setCheckable(True) bg.addButton(b, j + 1) grid.addWidget(b, i, j + 1) bg.buttonClicked.connect(lambda: self.record_log()) self.bgroup2_2.append(bg) self.bgroup2_1.buttonClicked.connect(lambda: self.record_log()) grid.setAlignment(Qt.AlignCenter) gpbox2_1.setLayout(grid) gpbox2_layout.addWidget(scroll) # Add to layout self.layout.addLayout(self.left_layout) self.layout.addWidget(gpbox2) self.setLayout(self.layout) self.update_json()