本文整理汇总了Python中PyQt5.QtWidgets.QVBoxLayout.setSizeConstraint方法的典型用法代码示例。如果您正苦于以下问题:Python QVBoxLayout.setSizeConstraint方法的具体用法?Python QVBoxLayout.setSizeConstraint怎么用?Python QVBoxLayout.setSizeConstraint使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PyQt5.QtWidgets.QVBoxLayout
的用法示例。
在下文中一共展示了QVBoxLayout.setSizeConstraint方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: ListWidget
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
class ListWidget(QScrollArea):
def __init__(self, clearMouseOver, parent = None):
QScrollArea.__init__(self, parent)
self.clearMouseOver = clearMouseOver
self.mouseOver = False
self.widget = QWidget() # Just adding the layout directly doesn't work right, so wrap it in a QWidget
self.setWidget(self.widget)
self.setWidgetResizable(True)
self.setMouseTracking(True)
self.createLayout()
def createLayout(self):
self.layout = QVBoxLayout(self.widget)
self.layout.setSpacing(0)
self.layout.setContentsMargins(0, 0, 0, 0)
self.layout.setSizeConstraint(QLayout.SetMinimumSize)
def add(self, item):
self.layout.addWidget(item)
def clear(self):
QWidget().setLayout(self.layout)
self.createLayout()
def mousePressEvent(self, event):
if event.button() == Qt.RightButton:
self.clearMouseOver()
self.mouseOver = True
QScrollArea.mousePressEvent(self, event)
示例2: __init__
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
def __init__(self, parent=None):
super(ProjectTreeColumn, self).__init__(parent,
Qt.WindowStaysOnTopHint)
vbox = QVBoxLayout(self)
vbox.setSizeConstraint(QVBoxLayout.SetDefaultConstraint)
vbox.setContentsMargins(0, 0, 0, 0)
self._buttons = []
self._combo_project = QComboBox()
self._combo_project.setMinimumHeight(30)
self._combo_project.setContextMenuPolicy(Qt.CustomContextMenu)
vbox.addWidget(self._combo_project)
self._projects_area = QStackedLayout()
logger.debug("This is the projects area")
logger.debug(self._projects_area)
vbox.addLayout(self._projects_area)
self.projects = []
self._combo_project.currentIndexChanged[int].connect(self._change_current_project)
self._combo_project.customContextMenuRequested['const QPoint &'].connect(self.context_menu_for_root)
connections = (
{'target': 'main_container',
'signal_name': 'addToProject',#(QString)
'slot': self._add_file_to_project},
{'target': 'main_container',
'signal_name': 'showFileInExplorer',#(QString)
'slot': self._show_file_in_explorer},
)
IDE.register_service('projects_explorer', self)
IDE.register_signals('projects_explorer', connections)
ExplorerContainer.register_tab(translations.TR_TAB_PROJECTS, self)
示例3: __init__
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
def __init__(self):
super().__init__()
self.setWindowTitle('Simple Form')
self.first_name = self._create_name_field()
self.last_name = self._create_name_field()
self.full_name = QLabel()
self.error_message = self._create_error_field()
fields = QFormLayout()
fields.addRow('First Name', self.first_name)
fields.addRow('Last Name', self.last_name)
fields.addRow('Full Name', self.full_name)
fields.addRow(None, self.error_message)
self.send_button = self._create_button('Send', self.send)
self.clear_button = self._create_button('Clear', self.reset_names)
close_button = self._create_button('&Close', qApp.quit, is_enabled=True, is_default=True)
buttons = QHBoxLayout()
buttons.addStretch(1)
buttons.addWidget(self.send_button)
buttons.addWidget(self.clear_button)
buttons.addWidget(close_button)
vb = QVBoxLayout()
vb.addLayout(fields)
vb.addStretch(1)
vb.addLayout(buttons)
vb.setSizeConstraint(QLayout.SetFixedSize)
self.setLayout(vb)
示例4: __init__
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
def __init__(self, parent=None):
super(ProjectTreeColumn, self).__init__(parent)
vbox = QVBoxLayout(self)
vbox.setSizeConstraint(QVBoxLayout.SetDefaultConstraint)
vbox.setContentsMargins(0, 0, 0, 0)
vbox.setSpacing(0)
self._buttons = []
frame = QFrame()
frame.setObjectName("actionbar")
box = QVBoxLayout(frame)
box.setContentsMargins(1, 1, 1, 1)
box.setSpacing(0)
self._combo_project = QComboBox()
self._combo_project.setSizePolicy(
QSizePolicy.Expanding, QSizePolicy.Fixed)
self._combo_project.setSizeAdjustPolicy(
QComboBox.AdjustToMinimumContentsLengthWithIcon)
self._combo_project.setObjectName("combo_projects")
box.addWidget(self._combo_project)
vbox.addWidget(frame)
self._combo_project.setContextMenuPolicy(Qt.CustomContextMenu)
self._projects_area = QStackedLayout()
logger.debug("This is the projects area")
vbox.addLayout(self._projects_area)
# Empty widget
self._empty_proj = QLabel(translations.TR_NO_PROJECTS)
self._empty_proj.setAlignment(Qt.AlignCenter)
self._empty_proj.setAutoFillBackground(True)
self._empty_proj.setBackgroundRole(QPalette.Base)
self._projects_area.addWidget(self._empty_proj)
self._projects_area.setCurrentWidget(self._empty_proj)
self.projects = []
self._combo_project.activated.connect(
self._change_current_project)
self._combo_project.customContextMenuRequested[
'const QPoint&'].connect(self.context_menu_for_root)
connections = (
{
"target": "main_container",
"signal_name": "addToProject",
"slot": self._add_file_to_project
},
{
"target": "main_container",
"signal_name": "showFileInExplorer",
"slot": self._show_file_in_explorer
},
)
IDE.register_service('projects_explorer', self)
IDE.register_signals('projects_explorer', connections)
ExplorerContainer.register_tab(translations.TR_TAB_PROJECTS, self)
示例5: __init__
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
def __init__(self, mainwindow):
"""Creates the about dialog. You can simply exec_() it."""
super(AboutDialog, self).__init__(mainwindow)
self.setWindowTitle(_("About {appname}").format(appname = appinfo.appname))
layout = QVBoxLayout()
self.setLayout(layout)
tabw = QTabWidget()
layout.addWidget(tabw)
tabw.addTab(About(self), _("About"))
tabw.addTab(Credits(self), _("Credits"))
tabw.addTab(Version(self), _("Version"))
button = QDialogButtonBox(QDialogButtonBox.Ok)
button.setCenterButtons(True)
button.accepted.connect(self.accept)
layout.addWidget(button)
layout.setSizeConstraint(QLayout.SetFixedSize)
示例6: MainWindow
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
#.........这里部分代码省略.........
# Help Menu
#
helpMenu = menubar.addMenu('&Help')
helpMenu.addAction(helpAction)
helpMenu.addAction(helpSDAction)
helpMenu.addAction(helpHKAction)
#--------------------------------------------
#
# Toolbar
#
toolbar = self.addToolBar('Exit')
toolbar.addAction(exitAction)
toolbar.addAction(openAction)
toolbar.addAction(saveAction)
toolbar.addAction(saveAsAction)
toolbar.addAction(settingsAction)
toolbar.addAction(helpAction)
#----------------------------------------------------
#
# Settings Dialog
#
#----------------------------------------------------
#
# Components Table
#
self.CmpTabBox = QGroupBox('Components', self)
self.CmpTabLayout = QVBoxLayout(self.CmpTabBox)
self.CmpTabLayout.setContentsMargins(4,10,4,4)
self.CmpTabLayout.setSpacing(10)
self.CmpTabLayout.setSizeConstraint(QVBoxLayout.SetMaximumSize)
self.CmpTable = ComponentsTable(self)
#self.CmpChooseButton = QPushButton('Choose', self)
self.CmpTabLayout.addWidget(self.CmpTable)
#self.CmpTabLayout.addWidget(self.CmpChooseButton)
#----------------------------------------------------
#
# Selector
#
self.SelectorBox = QGroupBox('Selector', self)
self.SelectorLayout = QVBoxLayout(self.SelectorBox)
self.SelectorLayout.setContentsMargins(4,10,4,4)
self.SelectorLayout.setSpacing(2)
self.SelectorBtnWidget = QWidget(self)
self.SelectorBtnLayout = QHBoxLayout(self.SelectorBtnWidget)
self.SelectorBtnLayout.setContentsMargins(4,10,4,4)
self.SelectorBtnLayout.setSpacing(10)
self.Selector = Selector(self)
self.SelApplyButton = QPushButton('Apply', self)
self.SelApplyButton.setToolTip('Alt+S: Apply selection patterns to components')
self.SelClearButton = QPushButton('Clear', self)
self.SelClearButton.setToolTip('Alt+C: Clear selection patterns')
self.SelTemplateButton = QPushButton('Use Component', self)
self.SelTemplateButton.setToolTip('Alt+T: Use Selected Component As Template')
示例7: run_iface_config_window
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
def run_iface_config_window(icon):
ifaces = list_ifaces()
win = QDialog()
win.setWindowTitle('CAN Interface Configuration')
win.setWindowIcon(icon)
win.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint)
combo = QComboBox(win)
combo.setEditable(True)
combo.setInsertPolicy(QComboBox.NoInsert)
combo.setSizeAdjustPolicy(QComboBox.AdjustToContents)
combo.addItems(ifaces.keys())
combo_completer = QCompleter()
combo_completer.setCaseSensitivity(Qt.CaseSensitive)
combo_completer.setModel(combo.model())
combo.setCompleter(combo_completer)
bitrate = QSpinBox()
bitrate.setMaximum(1000000)
bitrate.setMinimum(10000)
bitrate.setValue(1000000)
extra_args = QLineEdit()
extra_args.setFont(get_monospace_font())
ok = QPushButton('OK', win)
result = None
kwargs = {}
def on_ok():
nonlocal result, kwargs
a = str(extra_args.text())
if a:
try:
kwargs = dict(eval(a))
except Exception as ex:
show_error('Invalid parameters', 'Could not parse optional arguments', ex, parent=win)
return
kwargs['bitrate'] = int(bitrate.value())
result_key = str(combo.currentText()).strip()
try:
result = ifaces[result_key]
except KeyError:
result = result_key
win.close()
ok.clicked.connect(on_ok)
layout = QVBoxLayout()
layout.addWidget(QLabel('Select CAN interface or serial port for SLCAN:'))
layout.addWidget(combo)
layout.addWidget(QLabel('Interface bitrate (SLCAN only):'))
layout.addWidget(bitrate)
layout.addWidget(QLabel('Optional arguments (refer to Pyuavcan for info):'))
layout.addWidget(extra_args)
layout.addWidget(ok)
layout.setSizeConstraint(layout.SetFixedSize)
win.setLayout(layout)
win.exec()
return result, kwargs
示例8: run_iface_config_window
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
def run_iface_config_window(icon):
win = QDialog()
win.setWindowTitle('CAN Interface Configuration')
win.setWindowIcon(icon)
win.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint)
combo = QComboBox(win)
combo.setEditable(True)
combo.setInsertPolicy(QComboBox.NoInsert)
combo.setSizeAdjustPolicy(QComboBox.AdjustToContents)
combo.setFont(get_monospace_font())
combo_completer = QCompleter()
combo_completer.setCaseSensitivity(Qt.CaseSensitive)
combo_completer.setModel(combo.model())
combo.setCompleter(combo_completer)
bitrate = QSpinBox()
bitrate.setMaximum(1000000)
bitrate.setMinimum(10000)
bitrate.setValue(1000000)
extra_args = QLineEdit()
extra_args.setFont(get_monospace_font())
ok = QPushButton('OK', win)
ifaces = None
def update_iface_list():
nonlocal ifaces
ifaces = iface_lister.get_list()
known_keys = set()
remove_indices = []
was_empty = combo.count() == 0
# Marking known and scheduling for removal
for idx in count():
tx = combo.itemText(idx)
if not tx:
break
known_keys.add(tx)
if tx not in ifaces:
logger.debug('Removing iface %r', tx)
remove_indices.append(idx)
# Removing - starting from the last item in order to retain indexes
for idx in remove_indices[::-1]:
combo.removeItem(idx)
# Adding new items - starting from the last item in order to retain the final order
for key in list(ifaces.keys())[::-1]:
if key not in known_keys:
logger.debug('Adding iface %r', key)
combo.insertItem(0, key)
# Updating selection
if was_empty:
combo.setCurrentIndex(0)
result = None
kwargs = {}
def on_ok():
nonlocal result, kwargs
a = str(extra_args.text())
if a:
try:
kwargs = dict(eval(a))
except Exception as ex:
show_error('Invalid parameters', 'Could not parse optional arguments', ex, parent=win)
return
kwargs['bitrate'] = int(bitrate.value())
result_key = str(combo.currentText()).strip()
if not result_key:
show_error('Invalid parameters', 'Interface name cannot be empty', 'Please select a valid interface',
parent=win)
return
try:
result = ifaces[result_key]
except KeyError:
result = result_key
win.close()
ok.clicked.connect(on_ok)
layout = QVBoxLayout()
layout.addWidget(QLabel('Select CAN interface or serial port for SLCAN:'))
layout.addWidget(combo)
layout.addWidget(QLabel('Interface bitrate (SLCAN only):'))
layout.addWidget(bitrate)
layout.addWidget(QLabel('Optional arguments (refer to PyUAVCAN for info):'))
layout.addWidget(extra_args)
layout.addWidget(ok)
layout.setSizeConstraint(layout.SetFixedSize)
win.setLayout(layout)
with BackgroundIfaceListUpdater() as iface_lister:
update_iface_list()
timer = QTimer(win)
timer.setSingleShot(False)
timer.timeout.connect(update_iface_list)
timer.start(int(BackgroundIfaceListUpdater.UPDATE_INTERVAL / 2 * 1000))
win.exec()
#.........这里部分代码省略.........
示例9: PasswordDialog
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
class PasswordDialog(QDialog):
""" Basic dialog with a textbox input field for the password/-phrase and OK/Cancel buttons """
def __init__(self, parent, message, title='Enter Password'):
"""
:param parent: The parent window/dialog used to enable modal behaviour
:type parent: :class:`gtk.Widget`
:param message: The message that gets displayed above the textbox
:type message: str
:param title: Displayed in the dialogs titlebar
:type title: str or None
"""
super(PasswordDialog, self).__init__(parent, Qt.WindowCloseButtonHint | Qt.WindowTitleHint)
self.setWindowTitle(title)
self.layout = QVBoxLayout()
self.layout.setSizeConstraint(QLayout.SetFixedSize)
self.layout.setSpacing(10)
# create icon and label
self.header_box = QHBoxLayout()
self.header_box.setSpacing(10)
self.header_box.setAlignment(Qt.AlignLeft)
self.header_text = QLabel(message)
icon = QLabel()
icon.setPixmap(QIcon.fromTheme('dialog-password', QApplication.style().standardIcon(QStyle.SP_DriveHDIcon)).pixmap(32))
self.header_box.addWidget(icon)
self.header_box.addWidget(self.header_text)
self.layout.addLayout(self.header_box)
# create the text input field
self.pw_box = QLineEdit()
self.pw_box.setMinimumSize(0, 25)
# password will not be shown on screen
self.pw_box.setEchoMode(QLineEdit.Password)
self.layout.addWidget(self.pw_box)
self.layout.addSpacing(10)
# OK and Cancel buttons
self.buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, parent=self)
self.buttons.accepted.connect(self.on_accepted)
self.buttons.rejected.connect(self.reject)
self.layout.addWidget(self.buttons)
self.setLayout(self.layout)
self.pw_box.setFocus()
def on_accepted(self):
""" Event handler for accept signal: block when input field empty """
if self.pw_box.text() != '':
self.accept()
else:
self.pw_box.setFocus()
def get_pw(self):
""" Get pw inputfiled value, returns python unicode instead of QString in py2"""
try:
return str(self.pw_box.text())
except UnicodeEncodeError:
return unicode(self.pw_box.text().toUtf8(), encoding="UTF-8")
def get_password(self):
""" Dialog runs itself and returns the password/-phrase entered
or throws an exception if the user cancelled/closed the dialog
:returns: The entered password/-phrase
:rtype: str
:raises: UserInputError
"""
try:
if self.exec_():
return self.get_pw()
else:
raise UserInputError()
finally:
self.destroy()
示例10: PyntGui
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
class PyntGui(object):
pynt = None
AVATAR_SIZE = 60
AVATAR_DEFAULT = 'assets/example.org_user.jpg'
WINDOW_TITLE = 'Pynt, for #pants'
ICON_APP = 'assets/icons/pynt.png'
ICON_USER = 'assets/icons/rainbow.png'
ICON_TIME = 'assets/icons/time.png'
ICON_URL = 'assets/icons/connect.png'
def __init__(self, pynt):
self.pynt = pynt
self.bootstrap()
def bootstrap(self):
self.no_margin = QMargins(0, 0, 0, 0)
self.app = App()
self.app.setWindowIcon(QIcon(self.ICON_APP))
if platform.system() == 'Windows':
myappid = 'f5n.pynt.alpha'
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
self.scroll_area = QScrollArea()
self.scroll_area.setContentsMargins(self.no_margin)
self.scroll_area.setBackgroundRole(QPalette.Dark);
self.scroll_area.setWidgetResizable(True)
self.scroll_area.setWindowTitle(self.WINDOW_TITLE)
self.main_layout = QVBoxLayout()
self.main_layout.setSpacing(0)
self.main_layout.setContentsMargins(self.no_margin)
self.main_layout.addWidget(self.scroll_area)
self.contents = QWidget()
self.contents.setContentsMargins(self.no_margin)
self.contents.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
#self.contents.setScaledContents(True)
self.scroll_area.setWidget(self.contents)
self.layout = QVBoxLayout(self.contents)
self.layout.setSizeConstraint(QLayout.SetMinimumSize)
return self
def addStuff(self, posts):
for post in posts:
# xpanel holds one post
xpanel_layout = QHBoxLayout()
xpanel_layout.setSpacing(5)
xpanel_layout.setContentsMargins(self.no_margin)
xpanel = QFrame()
xpanel.setContentsMargins(self.no_margin)
xpanel.setLayout(xpanel_layout)
avatar_label = self.updated_avatar(self.AVATAR_DEFAULT)
# panel holds controls and view
panel_layout = QVBoxLayout()
panel_layout.setSpacing(0)
panel_layout.setContentsMargins(self.no_margin)
panel = QFrame()
panel.setLayout(panel_layout)
panel.setContentsMargins(self.no_margin)
panel.setStyleSheet("background-color:green;")
# control holds the controls at the top
control_layout = QHBoxLayout()
control_layout.setSpacing(0)
control_layout.setContentsMargins(self.no_margin)
controls = QFrame()
controls.setStyleSheet("background-color:#ffeeee;")
controls.setContentsMargins(self.no_margin)
controls.setLayout(control_layout)
# ctrl_ is inside control
ctrl_url = QPushButton()
ctrl_url.setContentsMargins(self.no_margin)
ctrl_url.setStyleSheet("QPushButton { color: black; }")
ctrl_url.setFlat(True)
ctrl_url.setIcon(QIcon(self.ICON_URL))
ctrl_updated = QPushButton()
ctrl_updated.setContentsMargins(self.no_margin)
ctrl_updated.setStyleSheet("color:#000000;")
ctrl_updated.setFlat(True)
ctrl_updated.setIcon(QIcon(self.ICON_TIME))
ctrl_user = QPushButton()
ctrl_user.setContentsMargins(self.no_margin)
ctrl_user.setStyleSheet("QPushButton { color: black; }")
ctrl_user.setFlat(True)
ctrl_user.setIcon(QIcon(self.ICON_USER))
# view displays HTML
view = WebView()
#view.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
#.........这里部分代码省略.........
示例11: run_iface_config_window
# 需要导入模块: from PyQt5.QtWidgets import QVBoxLayout [as 别名]
# 或者: from PyQt5.QtWidgets.QVBoxLayout import setSizeConstraint [as 别名]
#.........这里部分代码省略.........
def update_slcan_options_visibility():
if RUNNING_ON_LINUX:
slcan_active = '/' in combo.currentText()
else:
slcan_active = True
slcan_group.setEnabled(slcan_active)
combo.currentTextChanged.connect(update_slcan_options_visibility)
ifaces = None
def update_iface_list():
nonlocal ifaces
ifaces = iface_lister.get_list()
known_keys = set()
remove_indices = []
was_empty = combo.count() == 0
# Marking known and scheduling for removal
for idx in count():
tx = combo.itemText(idx)
if not tx:
break
known_keys.add(tx)
if tx not in ifaces:
logger.debug('Removing iface %r', tx)
remove_indices.append(idx)
# Removing - starting from the last item in order to retain indexes
for idx in remove_indices[::-1]:
combo.removeItem(idx)
# Adding new items - starting from the last item in order to retain the final order
for key in list(ifaces.keys())[::-1]:
if key not in known_keys:
logger.debug('Adding iface %r', key)
combo.insertItem(0, key)
# Updating selection
if was_empty:
combo.setCurrentIndex(0)
result = None
kwargs = {}
def on_ok():
nonlocal result, kwargs
try:
baud_rate_value = int(baudrate.currentText())
except ValueError:
show_error('Invalid parameters', 'Could not parse baud rate', 'Please specify correct baud rate',
parent=win)
return
if not (min(STANDARD_BAUD_RATES) <= baud_rate_value <= max(STANDARD_BAUD_RATES)):
show_error('Invalid parameters', 'Baud rate is out of range',
'Baud rate value should be within [%s, %s]' %
(min(STANDARD_BAUD_RATES), max(STANDARD_BAUD_RATES)),
parent=win)
return
kwargs['baudrate'] = baud_rate_value
kwargs['bitrate'] = int(bitrate.value())
result_key = str(combo.currentText()).strip()
if not result_key:
show_error('Invalid parameters', 'Interface name cannot be empty', 'Please select a valid interface',
parent=win)
return
try:
result = ifaces[result_key]
except KeyError:
result = result_key
win.close()
ok.clicked.connect(on_ok)
layout = QVBoxLayout(win)
layout.addWidget(QLabel('Select CAN interface'))
layout.addWidget(combo)
slcan_group = QGroupBox('SLCAN adapter settings', win)
slcan_layout = QVBoxLayout(slcan_group)
slcan_layout.addWidget(QLabel('CAN bus bit rate:'))
slcan_layout.addWidget(bitrate)
slcan_layout.addWidget(QLabel('Adapter baud rate (not applicable to USB-CAN adapters):'))
slcan_layout.addWidget(baudrate)
slcan_group.setLayout(slcan_layout)
layout.addWidget(slcan_group)
layout.addWidget(ok)
layout.setSizeConstraint(layout.SetFixedSize)
win.setLayout(layout)
with BackgroundIfaceListUpdater() as iface_lister:
update_slcan_options_visibility()
update_iface_list()
timer = QTimer(win)
timer.setSingleShot(False)
timer.timeout.connect(update_iface_list)
timer.start(int(BackgroundIfaceListUpdater.UPDATE_INTERVAL / 2 * 1000))
win.exec()
return result, kwargs