def __init__(self): QWidget.__init__(self, flags=Qt.Widget) self.setWindowTitle("Soccer Highlight") self.setWindowIcon(QIcon('./images/soccer.png')) self.setFixedWidth(640) self.setFixedHeight(480) # self.setStyleSheet("background-color: white") # self.setWindowOpacity() layout_base = QBoxLayout(QBoxLayout.TopToBottom, self) self.setLayout(layout_base) # 첫 번째 그룹 QBoxLayout grp_1 = QGroupBox("LEAUGE") layout_base.addWidget(grp_1) layout = QHBoxLayout() layout.addWidget(QPushButton("Laliga")) layout.addWidget(QPushButton("Serie A")) layout.addWidget(QPushButton("Ligue 1")) layout.addWidget(QPushButton("Bundesliga")) layout.addWidget(QPushButton("K-League")) grp_1.setLayout(layout) # 두 번째 그룹 QGridLayout grp_2 = QGroupBox("Select your file & League") layout_base.addWidget(grp_2) grp_2_layout = QBoxLayout(QBoxLayout.LeftToRight) grp_2.setLayout(grp_2_layout) layout = QGridLayout() # layout.addItem(QSpacerItem(10, 200)) # 파일 선택 버튼 self.file_b = QPushButton('File Open') self.file_b.clicked.connect(self.pushButtonClicked) layout.addWidget(self.file_b, 1, 0) # 파일 이름 출력 self.f_label = QLabel() layout.addWidget(self.f_label) # 리그 선택 L_cb = QComboBox(self) L_cb.addItem('Laliga') L_cb.addItem('Serie A') L_cb.addItem('Ligue 1') L_cb.addItem('Bundesliga') L_cb.addItem('K-League') grp_2_layout.addLayout(layout) grp_2_layout.addWidget(L_cb) # 세 번째 그룹 QFormLaytout grp_3 = QGroupBox("Make HighLight") layout_base.addWidget(grp_3) layout = QFormLayout() grp_3.setLayout(layout) self.submit_b = QPushButton('확인') self.submit_b.clicked.connect(self.makeHighlight) layout.addRow(self.submit_b)
def __init__(self): QWidget.__init__(self, flags=Qt.Widget) self.setWindowTitle("Various Layout Widgets") self.setFixedWidth(640) self.setFixedHeight(480) layout_base = QBoxLayout(QBoxLayout.TopToBottom, self) self.setLayout(layout_base) # 첫 번째 그룹 QBoxLayout grp_1 = QGroupBox("QBoxLayout") layout_base.addWidget(grp_1) layout = QHBoxLayout() layout.addWidget(QPushButton("Butoon 1")) layout.addWidget(QPushButton("Butoon 1")) layout.addWidget(QPushButton("Butoon 1")) grp_1.setLayout(layout) # 두 번째 그룹 QGridLayout grp_2 = QGroupBox("QGridLayout") layout_base.addWidget(grp_2) grp_2_layout = QBoxLayout(QBoxLayout.LeftToRight) grp_2.setLayout(grp_2_layout) layout = QGridLayout() layout.addItem(QSpacerItem(10, 100)) layout.addWidget(QLabel("Line Edit 1:"), 1, 0) layout.addWidget(QLabel("Line Edit 2:"), 2, 0) layout.addWidget(QLabel("Line Edit 2:"), 3, 0) layout.addWidget(QLineEdit(), 1, 1) layout.addWidget(QLineEdit(), 2, 1) layout.addWidget(QLineEdit(), 3, 1) grp_2_layout.addLayout(layout) grp_2_layout.addWidget(QTextEdit()) # 세 번째 그룹 QFormLaytout grp_3 = QGroupBox("QFormLaytout") layout_base.addWidget(grp_3) layout = QFormLayout() grp_3.setLayout(layout) layout.addRow(QLabel("Line Edit 1:"), QLineEdit()) layout.addRow(QLabel("Line Edit 2:"), QLineEdit()) layout.addRow(QLabel("Line Edit 3:"), QLineEdit())
def __init__(self): QWidget.__init__(self, flags=Qt.Widget) self.setWindowTitle("Various Layout Widgets application") self.setFixedWidth(640) self.setFixedHeight(400) layout_base = QBoxLayout(QBoxLayout.TopToBottom, self) self.setLayout(layout_base) grp_1 = QGroupBox("1st group") layout_base.addWidget(grp_1) layout = QHBoxLayout() layout.addWidget(QPushButton("Button 1")) layout.addWidget(QPushButton("Button 2")) layout.addWidget(QPushButton("Button 3")) grp_1.setLayout(layout) grp_2 = QGroupBox("2nd group") layout_base.addWidget(grp_2) grp_2_layout = QBoxLayout(QBoxLayout.LeftToRight) grp_2.setLayout(grp_2_layout) layout = QGridLayout() layout.addItem(QSpacerItem(100, 200)) layout.addWidget(QLabel("Line Edit 1:"), 1, 0) layout.addWidget(QLabel("Line Edit 2:"), 2, 0) layout.addWidget(QLabel("Line Edit 3:"), 3, 0) layout.addWidget(QLineEdit(), 1, 1) layout.addWidget(QLineEdit(), 2, 1) layout.addWidget(QLineEdit(), 3, 1) grp_2_layout.addLayout(layout) grp_2_layout.addWidget(QTextEdit()) grp_3 = QGroupBox("Last group") layout_base.addWidget(grp_3) layout = QFormLayout() grp_3.setLayout(layout) layout.addRow(QLabel("Line Edit 1:"), QLineEdit()) layout.addRow(QLabel("Line Edit 2:"), QLineEdit()) layout.addRow(QLabel("Line Edit 3:"), QLineEdit())
def createFormGroupIntro(self): """Create forms for websocket connection to intro.""" self.formGroupIntro = QWidget() mainLayout = QVBoxLayout() box = QGroupBox(_("Style")) layout = QHBoxLayout() styleqb = StyleComboBox( scctool.settings.casting_html_dir + "/src/css/intro", "intro") styleqb.connect2WS(self.controller, 'intro') button = QPushButton(_("Show in Browser")) button.clicked.connect(lambda: self.openHTML( scctool.settings.casting_html_dir + "/intro.html")) layout.addWidget(styleqb, 2) layout.addWidget(button, 1) box.setLayout(layout) mainLayout.addWidget(box) self.hotkeyBox = QGroupBox(_("Hotkeys")) layout = QVBoxLayout() self.controller.websocketThread.unregister_hotkeys(force=True) self.cb_single_hotkey = QCheckBox( _("Use a single hotkey for both players")) self.cb_single_hotkey.stateChanged.connect(self.singleHotkeyChanged) layout.addWidget(self.cb_single_hotkey) self.hotkeys = dict() layout.addLayout(self.addHotkey("hotkey_player1", _("Player 1"))) layout.addLayout(self.addHotkey("hotkey_player2", _("Player 2"))) layout.addLayout(self.addHotkey("hotkey_debug", _("Debug"))) self.cb_single_hotkey.setChecked( self.hotkeys['hotkey_player1'].getKey() == self.hotkeys['hotkey_player2'].getKey()) self.connectHotkeys() label = QLabel(_("Player 1 is always the player your observer" " camera is centered on at start of a game.")) layout.addWidget(label) self.hotkeyBox.setLayout(layout) mainLayout.addWidget(self.hotkeyBox) self.introBox = QGroupBox(_("Animation")) layout = QFormLayout() self.cb_animation = QComboBox() animation = scctool.settings.config.parser.get("Intros", "animation") currentIdx = 0 idx = 0 options = dict() options['Fly-In'] = _("Fly-In") options['Slide'] = _("Slide") options['Fanfare'] = _("Fanfare") for key, item in options.items(): self.cb_animation.addItem(item, key) if(key == animation): currentIdx = idx idx += 1 self.cb_animation.setCurrentIndex(currentIdx) self.cb_animation.currentIndexChanged.connect(self.changed) label = QLabel(_("Animation:") + " ") label.setMinimumWidth(120) layout.addRow(label, self.cb_animation) self.sb_displaytime = QDoubleSpinBox() self.sb_displaytime.setRange(0, 10) self.sb_displaytime.setDecimals(1) self.sb_displaytime.setValue( scctool.settings.config.parser.getfloat("Intros", "display_time")) self.sb_displaytime.setSuffix(" " + _("Seconds")) self.sb_displaytime.valueChanged.connect(self.changed) layout.addRow(QLabel( _("Display Duration:") + " "), self.sb_displaytime) self.sl_sound = QSlider(Qt.Horizontal) self.sl_sound.setMinimum(0) self.sl_sound.setMaximum(20) self.sl_sound.setValue( scctool.settings.config.parser.getint("Intros", "sound_volume")) self.sl_sound.setTickPosition(QSlider.TicksBothSides) self.sl_sound.setTickInterval(1) self.sl_sound.valueChanged.connect(self.changed) layout.addRow(QLabel( _("Sound Volume:") + " "), self.sl_sound) self.introBox.setLayout(layout) mainLayout.addWidget(self.introBox) self.ttsBox = QGroupBox(_("Text-to-Speech")) layout = QFormLayout() self.cb_tts_active = QCheckBox() self.cb_tts_active.setChecked( scctool.settings.config.parser.getboolean("Intros", "tts_active")) self.cb_tts_active.stateChanged.connect(self.changed) label = QLabel(_("Activate Text-to-Speech:") + " ") label.setMinimumWidth(120) layout.addRow(label, self.cb_tts_active) self.icons = {} self.icons['MALE'] = QIcon(scctool.settings.getResFile('male.png')) self.icons['FEMALE'] = QIcon(scctool.settings.getResFile('female.png')) self.cb_tts_voice = QComboBox() currentIdx = 0 idx = 0 tts_voices = self.controller.tts.getVoices() tts_voice = scctool.settings.config.parser.get("Intros", "tts_voice") for voice in tts_voices: self.cb_tts_voice.addItem( self.icons[voice['ssmlGender']], ' ' + voice['name'], voice['name']) if(voice['name'] == tts_voice): currentIdx = idx idx += 1 self.cb_tts_voice.setCurrentIndex(currentIdx) self.cb_tts_voice.currentIndexChanged.connect(self.changed) layout.addRow(QLabel( _("Voice:") + " "), self.cb_tts_voice) self.ttsBox.setStyleSheet("QComboBox { combobox-popup: 0; }") self.ttsBox.setLayout(layout) mainLayout.addWidget(self.ttsBox) self.sb_tts_pitch = QDoubleSpinBox() self.sb_tts_pitch.setRange(-20, 20) self.sb_tts_pitch.setDecimals(2) self.sb_tts_pitch.setValue( scctool.settings.config.parser.getfloat("Intros", "tts_pitch")) self.sb_tts_pitch.valueChanged.connect(self.changed) layout.addRow(QLabel( _("Pitch:") + " "), self.sb_tts_pitch) self.sb_tts_rate = QDoubleSpinBox() self.sb_tts_rate.setRange(0.25, 4.00) self.sb_tts_rate.setSingleStep(0.1) self.sb_tts_rate.setDecimals(2) self.sb_tts_rate.setValue( scctool.settings.config.parser.getfloat("Intros", "tts_rate")) self.sb_tts_rate.valueChanged.connect(self.changed) layout.addRow(QLabel( _("Rate:") + " "), self.sb_tts_rate) self.cb_tts_scope = QComboBox() scope = scctool.settings.config.parser.get("Intros", "tts_scope") currentIdx = 0 idx = 0 options = self.controller.tts.getOptions() for key, item in options.items(): self.cb_tts_scope.addItem(item['desc'], key) if(key == scope): currentIdx = idx idx += 1 self.cb_tts_scope.setCurrentIndex(currentIdx) self.cb_tts_scope.currentIndexChanged.connect(self.changed) layout.addRow(QLabel( _("Line:") + " "), self.cb_tts_scope) self.sl_tts_sound = QSlider(Qt.Horizontal) self.sl_tts_sound.setMinimum(0) self.sl_tts_sound.setMaximum(20) self.sl_tts_sound.setValue( scctool.settings.config.parser.getint("Intros", "tts_volume")) self.sl_tts_sound.setTickPosition(QSlider.TicksBothSides) self.sl_tts_sound.setTickInterval(1) self.sl_tts_sound.valueChanged.connect(self.changed) layout.addRow(QLabel( _("Sound Volume:") + " "), self.sl_tts_sound) text = _( "Text-to-Speech provided by Google-Cloud is paid for " "by StarCraft Casting Tool Patrons. To keep this service up " "consider becoming a <a href='{patreon}'>Patron</a> yourself. " "You can test all voices at {tts}.") patreon = 'https://www.patreon.com/StarCraftCastingTool' url = 'https://cloud.google.com/text-to-speech/' tts = "<a href='{}'>cloud.google.com/text-to-speech</a>" tts = tts.format(url) label = QLabel(text.format(patreon=patreon, tts=tts)) label.setAlignment(Qt.AlignJustify) label.setOpenExternalLinks(True) label.setWordWrap(True) label.setMargin(5) layout.addRow(label) mainLayout.addItem(QSpacerItem( 0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)) self.formGroupIntro.setLayout(mainLayout)
def setupTab4(self, tab4): """Layout widgets for preview panel""" scrollContainer = QVBoxLayout() scrollArea = QScrollArea() scrollArea.setWidgetResizable(True) mainWidget = QWidget() layout = QVBoxLayout() mainWidget.setLayout(layout) mainWidget.setMinimumSize(QSize(420, 500)) scrollArea.setWidget(mainWidget) scrollContainer.addWidget(scrollArea) tab4.setLayout(scrollContainer) group1 = QGroupBox(self.tr("QHBoxLayout")) # , "QHBoxLayout布局")) hbox = QHBoxLayout() for i in range(1, 5): hbox.addWidget(QPushButton(self.tr("Button") + str(i))) group1.setLayout(hbox) layout.addWidget(group1) group2 = QGroupBox(self.tr("QGridLayout")) # , "QGridLayout布局")) group2.setCheckable(True) hbox = QGridLayout() hbox.addWidget(QLabel(self.tr("First line:")), 0, 0) # "第一行数据:")) hbox.addWidget(QLabel(self.tr("Second line:")), 1, 0) hbox.addWidget(QLabel(self.tr("Third line:")), 2, 0) hbox.addWidget(QLineEdit(), 0, 1) hbox.addWidget(QLineEdit("0"), 1, 1) inputText = QLineEdit() inputText.setPlaceholderText(self.tr("please input")) # "请输入:")) hbox.addWidget(inputText, 2, 1) text = QTextEdit( self.tr("This is a textedit, span 3 rows and 2 columns.") ) # "这是一个文本框,在QGridLayout中占三行两列。")) hbox.addWidget(text, 0, 2, 3, 2) group2.setLayout(hbox) layout.addWidget(group2) group3 = QGroupBox(self.tr("QFormLayout")) # "QFormLayout布局")) group3.setCheckable(True) hbox = QFormLayout() hbox.addRow(self.tr("please input data"), QLineEdit()) # "请输入数据:") hbox.addRow(QLabel(self.tr("please select data")), QSpinBox()) # "请选择数据:" box = QComboBox() box.addItem("Item1") box.addItem("Item2") box.addItem("Item3") hbox.addRow(self.tr("Please select item"), box) # , "请选择选项:" group3.setLayout(hbox) layout.addWidget(group3) group4 = QGroupBox("Spliter MDI Dock") group4.setCheckable(True) hbox = QHBoxLayout() group4.setLayout(hbox) layout.addWidget(group4) splitter1 = QSplitter(Qt.Horizontal) splitter2 = QSplitter(Qt.Vertical) splitter1.resize(420, 350) splitter2.resize(350, 350) splitter2.setStretchFactor(0, 1) mdi = QMdiArea() mdi.addSubWindow(QWidget()) mdi.addSubWindow(QWidget()) mdi.cascadeSubWindows() w1 = QWidget() w2 = QWidget() d1 = QDockWidget("dock1", w1) d2 = QDockWidget("dock2", w1) d1.setAllowedAreas(Qt.LeftDockWidgetArea) d1.setFeatures(QDockWidget.AllDockWidgetFeatures | QDockWidget.DockWidgetVerticalTitleBar) d2.setFeatures(QDockWidget.DockWidgetVerticalTitleBar) d3 = QDockWidget("dock3", w2) d3.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.TopDockWidgetArea) w1.resize(120, 120) splitter2.addWidget(w1) splitter2.addWidget(w2) splitter1.addWidget(mdi) splitter1.addWidget(splitter2) hbox.addWidget(splitter1) layout.addStretch(1)
def createFormGroupIntro(self): """Create forms for websocket connection to intro.""" self.formGroupIntro = QWidget() mainLayout = QVBoxLayout() box = QGroupBox(_("Style")) layout = QHBoxLayout() styleqb = StyleComboBox( scctool.settings.casting_html_dir + "/src/css/intro", "intro") styleqb.connect2WS(self.controller, 'intro') button = QPushButton(_("Show in Browser")) button.clicked.connect(lambda: self.openHTML( scctool.settings.casting_html_dir + "/intro.html")) layout.addWidget(styleqb, 2) layout.addWidget(button, 1) box.setLayout(layout) mainLayout.addWidget(box) self.hotkeyBox = QGroupBox(_("Hotkeys")) layout = QVBoxLayout() try: keyboard.unhook_all() except AttributeError: pass self.cb_single_hotkey = QCheckBox( _("Use a single hotkey for both players")) self.cb_single_hotkey.stateChanged.connect(self.singleHotkeyChanged) layout.addWidget(self.cb_single_hotkey) self.hotkeys = dict() layout.addLayout(self.addHotkey("hotkey_player1", _("Player 1"))) layout.addLayout(self.addHotkey("hotkey_player2", _("Player 2"))) layout.addLayout(self.addHotkey("hotkey_debug", _("Debug"))) self.cb_single_hotkey.setChecked( self.hotkeys['hotkey_player1'].getKey() == self.hotkeys['hotkey_player2'].getKey()) self.connectHotkeys() label = QLabel(_("Player 1 is always the player your observer" " camera is centered on at start of a game.")) layout.addWidget(label) self.hotkeyBox.setLayout(layout) mainLayout.addWidget(self.hotkeyBox) self.introBox = QGroupBox(_("Animation")) layout = QFormLayout() self.cb_animation = QComboBox() animation = scctool.settings.config.parser.get("Intros", "animation") currentIdx = 0 idx = 0 options = dict() options['Fly-In'] = _("Fly-In") options['Slide'] = _("Slide") options['Fanfare'] = _("Fanfare") for key, item in options.items(): self.cb_animation.addItem(item, key) if(key == animation): currentIdx = idx idx += 1 self.cb_animation.setCurrentIndex(currentIdx) self.cb_animation.currentIndexChanged.connect(self.changed) label = QLabel(_("Animation:") + " ") label.setMinimumWidth(120) layout.addRow(label, self.cb_animation) self.sb_displaytime = QDoubleSpinBox() self.sb_displaytime.setRange(0, 10) self.sb_displaytime.setDecimals(1) self.sb_displaytime.setValue( scctool.settings.config.parser.getfloat("Intros", "display_time")) self.sb_displaytime.setSuffix(" " + _("Seconds")) self.sb_displaytime.valueChanged.connect(self.changed) layout.addRow(QLabel( _("Display Duration:") + " "), self.sb_displaytime) self.sl_sound = QSlider(Qt.Horizontal) self.sl_sound.setMinimum(0) self.sl_sound.setMaximum(20) self.sl_sound.setValue( scctool.settings.config.parser.getint("Intros", "sound_volume")) self.sl_sound.setTickPosition(QSlider.TicksBothSides) self.sl_sound.setTickInterval(1) self.sl_sound.valueChanged.connect(self.changed) layout.addRow(QLabel( _("Sound Volume:") + " "), self.sl_sound) self.introBox.setLayout(layout) mainLayout.addWidget(self.introBox) self.ttsBox = QGroupBox(_("Text-to-Speech")) layout = QFormLayout() self.cb_tts_active = QCheckBox() self.cb_tts_active.setChecked( scctool.settings.config.parser.getboolean("Intros", "tts_active")) self.cb_tts_active.stateChanged.connect(self.changed) label = QLabel(_("Activate Text-to-Speech:") + " ") label.setMinimumWidth(120) layout.addRow(label, self.cb_tts_active) self.cb_tts_lang = QComboBox() currentIdx = 0 idx = 0 tts_langs = gtts.lang.tts_langs() tts_lang = scctool.settings.config.parser.get("Intros", "tts_lang") for key, name in tts_langs.items(): self.cb_tts_lang.addItem(name, key) if(key == tts_lang): currentIdx = idx idx += 1 self.cb_tts_lang.setCurrentIndex(currentIdx) self.cb_tts_lang.currentIndexChanged.connect(self.changed) layout.addRow(QLabel( _("Language:") + " "), self.cb_tts_lang) self.ttsBox.setStyleSheet("QComboBox { combobox-popup: 0; }") self.ttsBox.setLayout(layout) mainLayout.addWidget(self.ttsBox) self.cb_tts_scope = QComboBox() scope = scctool.settings.config.parser.get("Intros", "tts_scope") currentIdx = 0 idx = 0 options = dict() options['team_player'] = _("Team & Player") options['player'] = _("Player") for key, item in options.items(): self.cb_tts_scope.addItem(item, key) if(key == scope): currentIdx = idx idx += 1 self.cb_tts_scope.setCurrentIndex(currentIdx) self.cb_tts_scope.currentIndexChanged.connect(self.changed) layout.addRow(QLabel( _("Scope:") + " "), self.cb_tts_scope) self.sl_tts_sound = QSlider(Qt.Horizontal) self.sl_tts_sound.setMinimum(0) self.sl_tts_sound.setMaximum(20) self.sl_tts_sound.setValue( scctool.settings.config.parser.getint("Intros", "tts_volume")) self.sl_tts_sound.setTickPosition(QSlider.TicksBothSides) self.sl_tts_sound.setTickInterval(1) self.sl_tts_sound.valueChanged.connect(self.changed) layout.addRow(QLabel( _("Sound Volume:") + " "), self.sl_tts_sound) mainLayout.addItem(QSpacerItem( 0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)) self.formGroupIntro.setLayout(mainLayout)
layout.addWidget( QPushButton(f'Button ({row},{column}) + 2 columns span'), row, column, 1, 2) elif not span: layout.addWidget(QPushButton(f'Button ({row},{column})'), row, column) window.setLayout(layout) window.show() elif exercise == 5: window = QWidget() window.setWindowTitle('PyQT5 App') layout = QFormLayout() entries = ['Name', 'Age', 'Job', 'Hobbies'] for entry in entries: layout.addRow(f'{entry}:', QLineEdit()) window.setLayout(layout) window.show() elif exercise == 6: class Dialog(QDialog): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Chris' QDialog Box") dlgLayout = QVBoxLayout() formLayout = QFormLayout() formLayout.addRow('Name:', QLineEdit()) formLayout.addRow('Age:', QLineEdit()) formLayout.addRow('Job:', QLineEdit()) formLayout.addRow('Hobbies:', QLineEdit())