forked from M-Labs/artiq
1
0
Fork 0

gui: remove pyqtgraph

This commit is contained in:
Sebastien Bourdeauducq 2016-02-15 00:23:47 +01:00
parent 3ab35f7f8d
commit d30fe60edd
12 changed files with 202 additions and 202 deletions

View File

@ -5,9 +5,8 @@ import asyncio
import atexit import atexit
import os import os
import PyQt5 from PyQt5 import QtCore, QtGui, QtWidgets
from quamash import QEventLoop, QtGui, QtCore, QtWidgets from quamash import QEventLoop
import pyqtgraph
from artiq import __artiq_dir__ as artiq_dir from artiq import __artiq_dir__ as artiq_dir
from artiq.tools import * from artiq.tools import *
@ -35,9 +34,9 @@ def get_argparser():
return parser return parser
class MainWindow(QtGui.QMainWindow): class MainWindow(QtWidgets.QMainWindow):
def __init__(self, server): def __init__(self, server):
QtGui.QMainWindow.__init__(self) QtWidgets.QMainWindow.__init__(self)
icon = QtGui.QIcon(os.path.join(artiq_dir, "gui", "icon.png")) icon = QtGui.QIcon(os.path.join(artiq_dir, "gui", "icon.png"))
self.setWindowIcon(icon) self.setWindowIcon(icon)
self.setWindowTitle("ARTIQ - {}".format(server)) self.setWindowTitle("ARTIQ - {}".format(server))
@ -62,7 +61,7 @@ def main():
args = get_argparser().parse_args() args = get_argparser().parse_args()
init_logger(args) init_logger(args)
app = QtGui.QApplication([]) app = QtWidgets.QApplication([])
loop = QEventLoop(app) loop = QEventLoop(app)
asyncio.set_event_loop(loop) asyncio.set_event_loop(loop)
atexit.register(loop.close) atexit.register(loop.close)
@ -91,7 +90,7 @@ def main():
# initialize main window # initialize main window
main_window = MainWindow(args.server) main_window = MainWindow(args.server)
smgr.register(main_window) smgr.register(main_window)
status_bar = QtGui.QStatusBar() status_bar = QtWidgets.QStatusBar()
status_bar.showMessage("Connected to {}".format(args.server)) status_bar.showMessage("Connected to {}".format(args.server))
main_window.setStatusBar(status_bar) main_window.setStatusBar(status_bar)

View File

@ -4,7 +4,7 @@ import sys
import shlex import shlex
from functools import partial from functools import partial
from quamash import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from artiq.protocols.pipe_ipc import AsyncioParentComm from artiq.protocols.pipe_ipc import AsyncioParentComm
from artiq.protocols import pyon from artiq.protocols import pyon
@ -195,35 +195,35 @@ class AppletsDock(QtWidgets.QDockWidget):
self.table = QtWidgets.QTableWidget(0, 3) self.table = QtWidgets.QTableWidget(0, 3)
self.table.setHorizontalHeaderLabels(["Enable", "Name", "Command"]) self.table.setHorizontalHeaderLabels(["Enable", "Name", "Command"])
self.table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) self.table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.table.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) self.table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.table.horizontalHeader().setStretchLastSection(True) self.table.horizontalHeader().setStretchLastSection(True)
self.table.horizontalHeader().setResizeMode( self.table.horizontalHeader().setSectionResizeMode(
QtGui.QHeaderView.ResizeToContents) QtWidgets.QHeaderView.ResizeToContents)
self.table.verticalHeader().setResizeMode( self.table.verticalHeader().setSectionResizeMode(
QtGui.QHeaderView.ResizeToContents) QtWidgets.QHeaderView.ResizeToContents)
self.table.verticalHeader().hide() self.table.verticalHeader().hide()
self.table.setTextElideMode(QtCore.Qt.ElideNone) self.table.setTextElideMode(QtCore.Qt.ElideNone)
self.setWidget(self.table) self.setWidget(self.table)
self.table.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.table.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
new_action = QtGui.QAction("New applet", self.table) new_action = QtWidgets.QAction("New applet", self.table)
new_action.triggered.connect(self.new) new_action.triggered.connect(self.new)
self.table.addAction(new_action) self.table.addAction(new_action)
templates_menu = QtGui.QMenu() templates_menu = QtWidgets.QMenu()
for name, template in _templates: for name, template in _templates:
action = QtGui.QAction(name, self.table) action = QtWidgets.QAction(name, self.table)
action.triggered.connect(partial(self.new_template, template)) action.triggered.connect(partial(self.new_template, template))
templates_menu.addAction(action) templates_menu.addAction(action)
restart_action = QtGui.QAction("New applet from template", self.table) restart_action = QtWidgets.QAction("New applet from template", self.table)
restart_action.setMenu(templates_menu) restart_action.setMenu(templates_menu)
self.table.addAction(restart_action) self.table.addAction(restart_action)
restart_action = QtGui.QAction("Restart selected applet", self.table) restart_action = QtWidgets.QAction("Restart selected applet", self.table)
restart_action.setShortcut("CTRL+R") restart_action.setShortcut("CTRL+R")
restart_action.setShortcutContext(QtCore.Qt.WidgetShortcut) restart_action.setShortcutContext(QtCore.Qt.WidgetShortcut)
restart_action.triggered.connect(self.restart) restart_action.triggered.connect(self.restart)
self.table.addAction(restart_action) self.table.addAction(restart_action)
delete_action = QtGui.QAction("Delete selected applet", self.table) delete_action = QtWidgets.QAction("Delete selected applet", self.table)
delete_action.setShortcut("DELETE") delete_action.setShortcut("DELETE")
delete_action.setShortcutContext(QtCore.Qt.WidgetShortcut) delete_action.setShortcutContext(QtCore.Qt.WidgetShortcut)
delete_action.triggered.connect(self.delete) delete_action.triggered.connect(self.delete)

View File

@ -3,7 +3,7 @@ from collections import OrderedDict
from functools import partial from functools import partial
import logging import logging
from quamash import QtGui, QtCore, QtWidgets from PyQt5 import QtCore, QtWidgets
from artiq.tools import short_format from artiq.tools import short_format
from artiq.gui.tools import LayoutWidget from artiq.gui.tools import LayoutWidget
@ -39,19 +39,20 @@ class DatasetsDock(QtWidgets.QDockWidget):
grid = LayoutWidget() grid = LayoutWidget()
self.setWidget(grid) self.setWidget(grid)
self.search = QtGui.QLineEdit() self.search = QtWidgets.QLineEdit()
self.search.setPlaceholderText("search...") self.search.setPlaceholderText("search...")
self.search.editingFinished.connect(self._search_datasets) self.search.editingFinished.connect(self._search_datasets)
grid.addWidget(self.search, 0, 0) grid.addWidget(self.search, 0, 0)
self.table = QtGui.QTreeView() self.table = QtWidgets.QTreeView()
self.table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) self.table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.table.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) self.table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.table.header().setResizeMode(QtGui.QHeaderView.ResizeToContents) self.table.header().setSectionResizeMode(
QtWidgets.QHeaderView.ResizeToContents)
grid.addWidget(self.table, 1, 0) grid.addWidget(self.table, 1, 0)
self.table.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.table.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
delete_action = QtGui.QAction("Delete dataset", self.table) delete_action = QtWidgets.QAction("Delete dataset", self.table)
delete_action.triggered.connect(self.delete_clicked) delete_action.triggered.connect(self.delete_clicked)
delete_action.setShortcut("DELETE") delete_action.setShortcut("DELETE")
delete_action.setShortcutContext(QtCore.Qt.WidgetShortcut) delete_action.setShortcutContext(QtCore.Qt.WidgetShortcut)

View File

@ -1,7 +1,7 @@
import logging import logging
from collections import OrderedDict from collections import OrderedDict
from quamash import QtGui, QtCore from PyQt5 import QtCore, QtGui, QtWidgets
from artiq.gui.tools import LayoutWidget, disable_scroll_wheel from artiq.gui.tools import LayoutWidget, disable_scroll_wheel
@ -9,9 +9,9 @@ from artiq.gui.tools import LayoutWidget, disable_scroll_wheel
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class _StringEntry(QtGui.QLineEdit): class _StringEntry(QtWidgets.QLineEdit):
def __init__(self, argument): def __init__(self, argument):
QtGui.QLineEdit.__init__(self) QtWidgets.QLineEdit.__init__(self)
self.setText(argument["state"]) self.setText(argument["state"])
def update(text): def update(text):
argument["state"] = text argument["state"] = text
@ -26,9 +26,9 @@ class _StringEntry(QtGui.QLineEdit):
return procdesc.get("default", "") return procdesc.get("default", "")
class _BooleanEntry(QtGui.QCheckBox): class _BooleanEntry(QtWidgets.QCheckBox):
def __init__(self, argument): def __init__(self, argument):
QtGui.QCheckBox.__init__(self) QtWidgets.QCheckBox.__init__(self)
self.setChecked(argument["state"]) self.setChecked(argument["state"])
def update(checked): def update(checked):
argument["state"] = bool(checked) argument["state"] = bool(checked)
@ -43,9 +43,9 @@ class _BooleanEntry(QtGui.QCheckBox):
return procdesc.get("default", False) return procdesc.get("default", False)
class _EnumerationEntry(QtGui.QComboBox): class _EnumerationEntry(QtWidgets.QComboBox):
def __init__(self, argument): def __init__(self, argument):
QtGui.QComboBox.__init__(self) QtWidgets.QComboBox.__init__(self)
disable_scroll_wheel(self) disable_scroll_wheel(self)
choices = argument["desc"]["choices"] choices = argument["desc"]["choices"]
self.addItems(choices) self.addItems(choices)
@ -67,9 +67,9 @@ class _EnumerationEntry(QtGui.QComboBox):
return procdesc["choices"][0] return procdesc["choices"][0]
class _NumberEntry(QtGui.QDoubleSpinBox): class _NumberEntry(QtWidgets.QDoubleSpinBox):
def __init__(self, argument): def __init__(self, argument):
QtGui.QDoubleSpinBox.__init__(self) QtWidgets.QDoubleSpinBox.__init__(self)
disable_scroll_wheel(self) disable_scroll_wheel(self)
procdesc = argument["desc"] procdesc = argument["desc"]
scale = procdesc["scale"] scale = procdesc["scale"]
@ -108,7 +108,7 @@ class _NoScan(LayoutWidget):
LayoutWidget.__init__(self) LayoutWidget.__init__(self)
scale = procdesc["scale"] scale = procdesc["scale"]
self.value = QtGui.QDoubleSpinBox() self.value = QtWidgets.QDoubleSpinBox()
disable_scroll_wheel(self.value) disable_scroll_wheel(self.value)
self.value.setDecimals(procdesc["ndecimals"]) self.value.setDecimals(procdesc["ndecimals"])
if procdesc["global_min"] is not None: if procdesc["global_min"] is not None:
@ -122,7 +122,7 @@ class _NoScan(LayoutWidget):
self.value.setSingleStep(procdesc["global_step"]/scale) self.value.setSingleStep(procdesc["global_step"]/scale)
if procdesc["unit"]: if procdesc["unit"]:
self.value.setSuffix(" " + procdesc["unit"]) self.value.setSuffix(" " + procdesc["unit"])
self.addWidget(QtGui.QLabel("Value:"), 0, 0) self.addWidget(QtWidgets.QLabel("Value:"), 0, 0)
self.addWidget(self.value, 0, 1) self.addWidget(self.value, 0, 1)
self.value.setValue(state["value"]/scale) self.value.setValue(state["value"]/scale)
@ -151,20 +151,20 @@ class _RangeScan(LayoutWidget):
if procdesc["unit"]: if procdesc["unit"]:
spinbox.setSuffix(" " + procdesc["unit"]) spinbox.setSuffix(" " + procdesc["unit"])
self.addWidget(QtGui.QLabel("Min:"), 0, 0) self.addWidget(QtWidgets.QLabel("Min:"), 0, 0)
self.min = QtGui.QDoubleSpinBox() self.min = QtWidgets.QDoubleSpinBox()
disable_scroll_wheel(self.min) disable_scroll_wheel(self.min)
apply_properties(self.min) apply_properties(self.min)
self.addWidget(self.min, 0, 1) self.addWidget(self.min, 0, 1)
self.addWidget(QtGui.QLabel("Max:"), 1, 0) self.addWidget(QtWidgets.QLabel("Max:"), 1, 0)
self.max = QtGui.QDoubleSpinBox() self.max = QtWidgets.QDoubleSpinBox()
disable_scroll_wheel(self.max) disable_scroll_wheel(self.max)
apply_properties(self.max) apply_properties(self.max)
self.addWidget(self.max, 1, 1) self.addWidget(self.max, 1, 1)
self.addWidget(QtGui.QLabel("#Points:"), 2, 0) self.addWidget(QtWidgets.QLabel("#Points:"), 2, 0)
self.npoints = QtGui.QSpinBox() self.npoints = QtWidgets.QSpinBox()
disable_scroll_wheel(self.npoints) disable_scroll_wheel(self.npoints)
self.npoints.setMinimum(2) self.npoints.setMinimum(2)
self.npoints.setValue(10) self.npoints.setValue(10)
@ -188,8 +188,8 @@ class _ExplicitScan(LayoutWidget):
def __init__(self, state): def __init__(self, state):
LayoutWidget.__init__(self) LayoutWidget.__init__(self)
self.value = QtGui.QLineEdit() self.value = QtWidgets.QLineEdit()
self.addWidget(QtGui.QLabel("Sequence:"), 0, 0) self.addWidget(QtWidgets.QLabel("Sequence:"), 0, 0)
self.addWidget(self.value, 0, 1) self.addWidget(self.value, 0, 1)
float_regexp = "[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?" float_regexp = "[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?"
@ -208,7 +208,7 @@ class _ScanEntry(LayoutWidget):
LayoutWidget.__init__(self) LayoutWidget.__init__(self)
self.argument = argument self.argument = argument
self.stack = QtGui.QStackedWidget() self.stack = QtWidgets.QStackedWidget()
self.addWidget(self.stack, 1, 0, colspan=4) self.addWidget(self.stack, 1, 0, colspan=4)
procdesc = argument["desc"] procdesc = argument["desc"]
@ -222,11 +222,11 @@ class _ScanEntry(LayoutWidget):
self.stack.addWidget(widget) self.stack.addWidget(widget)
self.radiobuttons = OrderedDict() self.radiobuttons = OrderedDict()
self.radiobuttons["NoScan"] = QtGui.QRadioButton("No scan") self.radiobuttons["NoScan"] = QtWidgets.QRadioButton("No scan")
self.radiobuttons["LinearScan"] = QtGui.QRadioButton("Linear") self.radiobuttons["LinearScan"] = QtWidgets.QRadioButton("Linear")
self.radiobuttons["RandomScan"] = QtGui.QRadioButton("Random") self.radiobuttons["RandomScan"] = QtWidgets.QRadioButton("Random")
self.radiobuttons["ExplicitScan"] = QtGui.QRadioButton("Explicit") self.radiobuttons["ExplicitScan"] = QtWidgets.QRadioButton("Explicit")
scan_type = QtGui.QButtonGroup() scan_type = QtWidgets.QButtonGroup()
for n, b in enumerate(self.radiobuttons.values()): for n, b in enumerate(self.radiobuttons.values()):
self.addWidget(b, 0, n) self.addWidget(b, 0, n)
scan_type.addButton(b) scan_type.addButton(b)

View File

@ -3,7 +3,7 @@ import asyncio
from functools import partial from functools import partial
from collections import OrderedDict from collections import OrderedDict
from quamash import QtGui, QtCore, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from artiq.gui.tools import (LayoutWidget, log_level_to_name, from artiq.gui.tools import (LayoutWidget, log_level_to_name,
QDockWidgetCloseDetect) QDockWidgetCloseDetect)
@ -19,25 +19,25 @@ logger = logging.getLogger(__name__)
# 2. file:<class name>@<file name> # 2. file:<class name>@<file name>
class _ArgumentEditor(QtGui.QTreeWidget): class _ArgumentEditor(QtWidgets.QTreeWidget):
def __init__(self, manager, dock, expurl): def __init__(self, manager, dock, expurl):
self.manager = manager self.manager = manager
self.expurl = expurl self.expurl = expurl
QtGui.QTreeWidget.__init__(self) QtWidgets.QTreeWidget.__init__(self)
self.setColumnCount(3) self.setColumnCount(3)
self.header().setStretchLastSection(False) self.header().setStretchLastSection(False)
if hasattr(self.header(), "setSectionResizeMode"): if hasattr(self.header(), "setSectionResizeMode"):
set_resize_mode = self.header().setSectionResizeMode set_resize_mode = self.header().setSectionResizeMode
else: else:
set_resize_mode = self.header().setResizeMode set_resize_mode = self.header().setResizeMode
set_resize_mode(0, QtGui.QHeaderView.ResizeToContents) set_resize_mode(0, QtWidgets.QHeaderView.ResizeToContents)
set_resize_mode(1, QtGui.QHeaderView.Stretch) set_resize_mode(1, QtWidgets.QHeaderView.Stretch)
set_resize_mode(2, QtGui.QHeaderView.ResizeToContents) set_resize_mode(2, QtWidgets.QHeaderView.ResizeToContents)
self.header().setVisible(False) self.header().setVisible(False)
self.setSelectionMode(QtGui.QAbstractItemView.NoSelection) self.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)
self.setHorizontalScrollMode(QtGui.QAbstractItemView.ScrollPerPixel) self.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
self.setVerticalScrollMode(QtGui.QAbstractItemView.ScrollPerPixel) self.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
self._groups = dict() self._groups = dict()
self._arg_to_entry_widgetitem = dict() self._arg_to_entry_widgetitem = dict()
@ -45,11 +45,11 @@ class _ArgumentEditor(QtGui.QTreeWidget):
arguments = self.manager.get_submission_arguments(self.expurl) arguments = self.manager.get_submission_arguments(self.expurl)
if not arguments: if not arguments:
self.addTopLevelItem(QtGui.QTreeWidgetItem(["No arguments"])) self.addTopLevelItem(QtWidgets.QTreeWidgetItem(["No arguments"]))
for name, argument in arguments.items(): for name, argument in arguments.items():
entry = argty_to_entry[argument["desc"]["ty"]](argument) entry = argty_to_entry[argument["desc"]["ty"]](argument)
widget_item = QtGui.QTreeWidgetItem([name]) widget_item = QtWidgets.QTreeWidgetItem([name])
self._arg_to_entry_widgetitem[name] = entry, widget_item self._arg_to_entry_widgetitem[name] = entry, widget_item
if argument["group"] is None: if argument["group"] is None:
@ -57,24 +57,24 @@ class _ArgumentEditor(QtGui.QTreeWidget):
else: else:
self._get_group(argument["group"]).addChild(widget_item) self._get_group(argument["group"]).addChild(widget_item)
self.setItemWidget(widget_item, 1, entry) self.setItemWidget(widget_item, 1, entry)
recompute_argument = QtGui.QToolButton() recompute_argument = QtWidgets.QToolButton()
recompute_argument.setToolTip("Re-run the experiment's build " recompute_argument.setToolTip("Re-run the experiment's build "
"method and take the default value") "method and take the default value")
recompute_argument.setIcon(QtGui.QApplication.style().standardIcon( recompute_argument.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_BrowserReload)) QtWidgets.QStyle.SP_BrowserReload))
recompute_argument.clicked.connect( recompute_argument.clicked.connect(
partial(self._recompute_argument_clicked, name)) partial(self._recompute_argument_clicked, name))
fix_layout = LayoutWidget() fix_layout = LayoutWidget()
fix_layout.addWidget(recompute_argument) fix_layout.addWidget(recompute_argument)
self.setItemWidget(widget_item, 2, fix_layout) self.setItemWidget(widget_item, 2, fix_layout)
widget_item = QtGui.QTreeWidgetItem() widget_item = QtWidgets.QTreeWidgetItem()
self.addTopLevelItem(widget_item) self.addTopLevelItem(widget_item)
recompute_arguments = QtGui.QPushButton("Recompute all arguments") recompute_arguments = QtWidgets.QPushButton("Recompute all arguments")
recompute_arguments.setIcon(QtGui.QApplication.style().standardIcon( recompute_arguments.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_BrowserReload)) QtWidgets.QStyle.SP_BrowserReload))
recompute_arguments.setSizePolicy(QtGui.QSizePolicy.Maximum, recompute_arguments.setSizePolicy(QtWidgets.QSizePolicy.Maximum,
QtGui.QSizePolicy.Maximum) QtWidgets.QSizePolicy.Maximum)
recompute_arguments.clicked.connect(dock._recompute_arguments_clicked) recompute_arguments.clicked.connect(dock._recompute_arguments_clicked)
fix_layout = LayoutWidget() fix_layout = LayoutWidget()
fix_layout.addWidget(recompute_arguments) fix_layout.addWidget(recompute_arguments)
@ -83,7 +83,7 @@ class _ArgumentEditor(QtGui.QTreeWidget):
def _get_group(self, name): def _get_group(self, name):
if name in self._groups: if name in self._groups:
return self._groups[name] return self._groups[name]
group = QtGui.QTreeWidgetItem([name]) group = QtWidgets.QTreeWidgetItem([name])
for c in 0, 1: for c in 0, 1:
group.setBackground(c, QtGui.QBrush(QtGui.QColor(100, 100, 100))) group.setBackground(c, QtGui.QBrush(QtGui.QColor(100, 100, 100)))
group.setForeground(c, QtGui.QBrush(QtGui.QColor(220, 220, 255))) group.setForeground(c, QtGui.QBrush(QtGui.QColor(220, 220, 255)))
@ -155,9 +155,9 @@ class _ExperimentDock(QDockWidgetCloseDetect):
scheduling = manager.get_submission_scheduling(expurl) scheduling = manager.get_submission_scheduling(expurl)
options = manager.get_submission_options(expurl) options = manager.get_submission_options(expurl)
datetime = QtGui.QDateTimeEdit() datetime = QtWidgets.QDateTimeEdit()
datetime.setDisplayFormat("MMM d yyyy hh:mm:ss") datetime.setDisplayFormat("MMM d yyyy hh:mm:ss")
datetime_en = QtGui.QCheckBox("Due date:") datetime_en = QtWidgets.QCheckBox("Due date:")
self.layout.addWidget(datetime_en, 1, 0) self.layout.addWidget(datetime_en, 1, 0)
self.layout.addWidget(datetime, 1, 1) self.layout.addWidget(datetime, 1, 1)
@ -179,8 +179,8 @@ class _ExperimentDock(QDockWidgetCloseDetect):
scheduling["due_date"] = due_date scheduling["due_date"] = due_date
datetime_en.stateChanged.connect(update_datetime_en) datetime_en.stateChanged.connect(update_datetime_en)
pipeline_name = QtGui.QLineEdit() pipeline_name = QtWidgets.QLineEdit()
self.layout.addWidget(QtGui.QLabel("Pipeline:"), 1, 2) self.layout.addWidget(QtWidgets.QLabel("Pipeline:"), 1, 2)
self.layout.addWidget(pipeline_name, 1, 3) self.layout.addWidget(pipeline_name, 1, 3)
pipeline_name.setText(scheduling["pipeline_name"]) pipeline_name.setText(scheduling["pipeline_name"])
@ -188,9 +188,9 @@ class _ExperimentDock(QDockWidgetCloseDetect):
scheduling["pipeline_name"] = text scheduling["pipeline_name"] = text
pipeline_name.textEdited.connect(update_pipeline_name) pipeline_name.textEdited.connect(update_pipeline_name)
priority = QtGui.QSpinBox() priority = QtWidgets.QSpinBox()
priority.setRange(-99, 99) priority.setRange(-99, 99)
self.layout.addWidget(QtGui.QLabel("Priority:"), 2, 0) self.layout.addWidget(QtWidgets.QLabel("Priority:"), 2, 0)
self.layout.addWidget(priority, 2, 1) self.layout.addWidget(priority, 2, 1)
priority.setValue(scheduling["priority"]) priority.setValue(scheduling["priority"])
@ -198,7 +198,7 @@ class _ExperimentDock(QDockWidgetCloseDetect):
scheduling["priority"] = value scheduling["priority"] = value
priority.valueChanged.connect(update_priority) priority.valueChanged.connect(update_priority)
flush = QtGui.QCheckBox("Flush") flush = QtWidgets.QCheckBox("Flush")
flush.setToolTip("Flush the pipeline before starting the experiment") flush.setToolTip("Flush the pipeline before starting the experiment")
self.layout.addWidget(flush, 2, 2, 1, 2) self.layout.addWidget(flush, 2, 2, 1, 2)
@ -207,12 +207,12 @@ class _ExperimentDock(QDockWidgetCloseDetect):
scheduling["flush"] = bool(checked) scheduling["flush"] = bool(checked)
flush.stateChanged.connect(update_flush) flush.stateChanged.connect(update_flush)
log_level = QtGui.QComboBox() log_level = QtWidgets.QComboBox()
log_levels = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] log_levels = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
log_level.addItems(log_levels) log_level.addItems(log_levels)
log_level.setCurrentIndex(1) log_level.setCurrentIndex(1)
log_level.setToolTip("Minimum level for log entry production") log_level.setToolTip("Minimum level for log entry production")
log_level_label = QtGui.QLabel("Logging level:") log_level_label = QtWidgets.QLabel("Logging level:")
log_level_label.setToolTip("Minimum level for log message production") log_level_label.setToolTip("Minimum level for log message production")
self.layout.addWidget(log_level_label, 3, 0) self.layout.addWidget(log_level_label, 3, 0)
self.layout.addWidget(log_level, 3, 1) self.layout.addWidget(log_level, 3, 1)
@ -224,9 +224,9 @@ class _ExperimentDock(QDockWidgetCloseDetect):
log_level.currentIndexChanged.connect(update_log_level) log_level.currentIndexChanged.connect(update_log_level)
if "repo_rev" in options: if "repo_rev" in options:
repo_rev = QtGui.QLineEdit() repo_rev = QtWidgets.QLineEdit()
repo_rev.setPlaceholderText("current") repo_rev.setPlaceholderText("current")
repo_rev_label = QtGui.QLabel("Revision:") repo_rev_label = QtWidgets.QLabel("Revision:")
repo_rev_label.setToolTip("Experiment repository revision " repo_rev_label.setToolTip("Experiment repository revision "
"(commit ID) to use") "(commit ID) to use")
self.layout.addWidget(repo_rev_label, 3, 2) self.layout.addWidget(repo_rev_label, 3, 2)
@ -241,23 +241,23 @@ class _ExperimentDock(QDockWidgetCloseDetect):
options["repo_rev"] = None options["repo_rev"] = None
repo_rev.textEdited.connect(update_repo_rev) repo_rev.textEdited.connect(update_repo_rev)
submit = QtGui.QPushButton("Submit") submit = QtWidgets.QPushButton("Submit")
submit.setIcon(QtGui.QApplication.style().standardIcon( submit.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_DialogOkButton)) QtWidgets.QStyle.SP_DialogOkButton))
submit.setToolTip("Schedule the experiment (Ctrl+Return)") submit.setToolTip("Schedule the experiment (Ctrl+Return)")
submit.setShortcut("CTRL+RETURN") submit.setShortcut("CTRL+RETURN")
submit.setSizePolicy(QtGui.QSizePolicy.Expanding, submit.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding) QtWidgets.QSizePolicy.Expanding)
self.layout.addWidget(submit, 1, 4, 2, 1) self.layout.addWidget(submit, 1, 4, 2, 1)
submit.clicked.connect(self.submit_clicked) submit.clicked.connect(self.submit_clicked)
reqterm = QtGui.QPushButton("Terminate instances") reqterm = QtWidgets.QPushButton("Terminate instances")
reqterm.setIcon(QtGui.QApplication.style().standardIcon( reqterm.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_DialogCancelButton)) QtWidgets.QStyle.SP_DialogCancelButton))
reqterm.setToolTip("Request termination of instances (Ctrl+Backspace)") reqterm.setToolTip("Request termination of instances (Ctrl+Backspace)")
reqterm.setShortcut("CTRL+BACKSPACE") reqterm.setShortcut("CTRL+BACKSPACE")
reqterm.setSizePolicy(QtGui.QSizePolicy.Expanding, reqterm.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding) QtWidgets.QSizePolicy.Expanding)
self.layout.addWidget(reqterm, 3, 4) self.layout.addWidget(reqterm, 3, 4)
reqterm.clicked.connect(self.reqterm_clicked) reqterm.clicked.connect(self.reqterm_clicked)

View File

@ -2,7 +2,7 @@ import asyncio
import logging import logging
from functools import partial from functools import partial
from quamash import QtGui, QtCore, QtWidgets from PyQt5 import QtCore, QtWidgets
from artiq.gui.tools import LayoutWidget from artiq.gui.tools import LayoutWidget
from artiq.gui.models import DictSyncTreeSepModel from artiq.gui.models import DictSyncTreeSepModel
@ -11,9 +11,9 @@ from artiq.gui.models import DictSyncTreeSepModel
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class _OpenFileDialog(QtGui.QDialog): class _OpenFileDialog(QtWidgets.QDialog):
def __init__(self, explorer, exp_manager, experiment_db_ctl): def __init__(self, explorer, exp_manager, experiment_db_ctl):
QtGui.QDialog.__init__(self, parent=explorer) QtWidgets.QDialog.__init__(self, parent=explorer)
self.resize(710, 700) self.resize(710, 700)
self.setWindowTitle("Open file outside repository") self.setWindowTitle("Open file outside repository")
@ -21,21 +21,21 @@ class _OpenFileDialog(QtGui.QDialog):
self.exp_manager = exp_manager self.exp_manager = exp_manager
self.experiment_db_ctl = experiment_db_ctl self.experiment_db_ctl = experiment_db_ctl
grid = QtGui.QGridLayout() grid = QtWidgets.QGridLayout()
self.setLayout(grid) self.setLayout(grid)
grid.addWidget(QtGui.QLabel("Location:"), 0, 0) grid.addWidget(QtWidgets.QLabel("Location:"), 0, 0)
self.location_label = QtGui.QLabel("") self.location_label = QtWidgets.QLabel("")
grid.addWidget(self.location_label, 0, 1) grid.addWidget(self.location_label, 0, 1)
grid.setColumnStretch(1, 1) grid.setColumnStretch(1, 1)
self.file_list = QtGui.QListWidget() self.file_list = QtWidgets.QListWidget()
asyncio.ensure_future(self.refresh_view()) asyncio.ensure_future(self.refresh_view())
grid.addWidget(self.file_list, 1, 0, 1, 2) grid.addWidget(self.file_list, 1, 0, 1, 2)
self.file_list.doubleClicked.connect(self.accept) self.file_list.doubleClicked.connect(self.accept)
buttons = QtGui.QDialogButtonBox( buttons = QtWidgets.QDialogButtonBox(
QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel)
grid.addWidget(buttons, 2, 0, 1, 2) grid.addWidget(buttons, 2, 0, 1, 2)
buttons.accepted.connect(self.accept) buttons.accepted.connect(self.accept)
buttons.rejected.connect(self.reject) buttons.rejected.connect(self.reject)
@ -47,10 +47,10 @@ class _OpenFileDialog(QtGui.QDialog):
else: else:
self.location_label.setText(self.explorer.current_directory) self.location_label.setText(self.explorer.current_directory)
item = QtGui.QListWidgetItem() item = QtWidgets.QListWidgetItem()
item.setText("..") item.setText("..")
item.setIcon(QtGui.QApplication.style().standardIcon( item.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_FileDialogToParent)) QtWidgets.QStyle.SP_FileDialogToParent))
self.file_list.addItem(item) self.file_list.addItem(item)
try: try:
@ -62,14 +62,14 @@ class _OpenFileDialog(QtGui.QDialog):
self.explorer.current_directory = "" self.explorer.current_directory = ""
for name in sorted(contents, key=lambda x: (x[-1] not in "\\/", x)): for name in sorted(contents, key=lambda x: (x[-1] not in "\\/", x)):
if name[-1] in "\\/": if name[-1] in "\\/":
icon = QtGui.QStyle.SP_DirIcon icon = QtWidgets.QStyle.SP_DirIcon
else: else:
icon = QtGui.QStyle.SP_FileIcon icon = QtWidgets.QStyle.SP_FileIcon
if name[-3:] != ".py": if name[-3:] != ".py":
continue continue
item = QtGui.QListWidgetItem() item = QtWidgets.QListWidgetItem()
item.setText(name) item.setText(name)
item.setIcon(QtGui.QApplication.style().standardIcon(icon)) item.setIcon(QtWidgets.QApplication.style().standardIcon(icon))
self.file_list.addItem(item) self.file_list.addItem(item)
def accept(self): def accept(self):
@ -107,7 +107,7 @@ class _OpenFileDialog(QtGui.QDialog):
logger.error("Failed to open file '%s'", logger.error("Failed to open file '%s'",
file, exc_info=True) file, exc_info=True)
asyncio.ensure_future(open_task()) asyncio.ensure_future(open_task())
QtGui.QDialog.accept(self) QtWidgets.QDialog.accept(self)
class Model(DictSyncTreeSepModel): class Model(DictSyncTreeSepModel):
@ -130,24 +130,24 @@ class Explorer(QtWidgets.QWidget):
self.d_shortcuts = d_shortcuts self.d_shortcuts = d_shortcuts
self.schedule_ctl = schedule_ctl self.schedule_ctl = schedule_ctl
self.el = QtGui.QTreeView() self.el = QtWidgets.QTreeView()
self.el.setHeaderHidden(True) self.el.setHeaderHidden(True)
self.el.setSelectionBehavior(QtGui.QAbstractItemView.SelectItems) self.el.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectItems)
layout.addWidget(self.el, 0, 0, 1, 2) layout.addWidget(self.el, 0, 0, 1, 2)
self.el.doubleClicked.connect( self.el.doubleClicked.connect(
partial(self.expname_action, "open_experiment")) partial(self.expname_action, "open_experiment"))
open = QtGui.QPushButton("Open") open = QtWidgets.QPushButton("Open")
open.setIcon(QtGui.QApplication.style().standardIcon( open.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_DialogOpenButton)) QtWidgets.QStyle.SP_DialogOpenButton))
open.setToolTip("Open the selected experiment (Return)") open.setToolTip("Open the selected experiment (Return)")
layout.addWidget(open, 1, 0) layout.addWidget(open, 1, 0)
open.clicked.connect( open.clicked.connect(
partial(self.expname_action, "open_experiment")) partial(self.expname_action, "open_experiment"))
submit = QtGui.QPushButton("Submit") submit = QtWidgets.QPushButton("Submit")
submit.setIcon(QtGui.QApplication.style().standardIcon( submit.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_DialogOkButton)) QtWidgets.QStyle.SP_DialogOkButton))
submit.setToolTip("Schedule the selected experiment (Ctrl+Return)") submit.setToolTip("Schedule the selected experiment (Ctrl+Return)")
layout.addWidget(submit, 1, 1) layout.addWidget(submit, 1, 1)
submit.clicked.connect( submit.clicked.connect(
@ -157,41 +157,41 @@ class Explorer(QtWidgets.QWidget):
explist_sub.add_setmodel_callback(self.set_model) explist_sub.add_setmodel_callback(self.set_model)
self.el.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.el.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
open_action = QtGui.QAction("Open", self.el) open_action = QtWidgets.QAction("Open", self.el)
open_action.triggered.connect( open_action.triggered.connect(
partial(self.expname_action, "open_experiment")) partial(self.expname_action, "open_experiment"))
open_action.setShortcut("RETURN") open_action.setShortcut("RETURN")
open_action.setShortcutContext(QtCore.Qt.WidgetShortcut) open_action.setShortcutContext(QtCore.Qt.WidgetShortcut)
self.el.addAction(open_action) self.el.addAction(open_action)
submit_action = QtGui.QAction("Submit", self.el) submit_action = QtWidgets.QAction("Submit", self.el)
submit_action.triggered.connect( submit_action.triggered.connect(
partial(self.expname_action, "submit")) partial(self.expname_action, "submit"))
submit_action.setShortcut("CTRL+RETURN") submit_action.setShortcut("CTRL+RETURN")
submit_action.setShortcutContext(QtCore.Qt.WidgetShortcut) submit_action.setShortcutContext(QtCore.Qt.WidgetShortcut)
self.el.addAction(submit_action) self.el.addAction(submit_action)
reqterm_action = QtGui.QAction("Request termination of instances", self.el) reqterm_action = QtWidgets.QAction("Request termination of instances", self.el)
reqterm_action.triggered.connect( reqterm_action.triggered.connect(
partial(self.expname_action, "request_inst_term")) partial(self.expname_action, "request_inst_term"))
reqterm_action.setShortcut("CTRL+BACKSPACE") reqterm_action.setShortcut("CTRL+BACKSPACE")
reqterm_action.setShortcutContext(QtCore.Qt.WidgetShortcut) reqterm_action.setShortcutContext(QtCore.Qt.WidgetShortcut)
self.el.addAction(reqterm_action) self.el.addAction(reqterm_action)
set_shortcut_menu = QtGui.QMenu() set_shortcut_menu = QtWidgets.QMenu()
for i in range(12): for i in range(12):
action = QtGui.QAction("F" + str(i+1), self.el) action = QtWidgets.QAction("F" + str(i+1), self.el)
action.triggered.connect(partial(self.set_shortcut, i)) action.triggered.connect(partial(self.set_shortcut, i))
set_shortcut_menu.addAction(action) set_shortcut_menu.addAction(action)
set_shortcut_action = QtGui.QAction("Set shortcut", self.el) set_shortcut_action = QtWidgets.QAction("Set shortcut", self.el)
set_shortcut_action.setMenu(set_shortcut_menu) set_shortcut_action.setMenu(set_shortcut_menu)
self.el.addAction(set_shortcut_action) self.el.addAction(set_shortcut_action)
sep = QtGui.QAction(self.el) sep = QtWidgets.QAction(self.el)
sep.setSeparator(True) sep.setSeparator(True)
self.el.addAction(sep) self.el.addAction(sep)
scan_repository_action = QtGui.QAction("Scan repository HEAD", scan_repository_action = QtWidgets.QAction("Scan repository HEAD",
self.el) self.el)
def scan_repository(): def scan_repository():
asyncio.ensure_future(experiment_db_ctl.scan_repository_async()) asyncio.ensure_future(experiment_db_ctl.scan_repository_async())
self.status_bar.showMessage("Requested repository scan") self.status_bar.showMessage("Requested repository scan")
@ -199,8 +199,8 @@ class Explorer(QtWidgets.QWidget):
self.el.addAction(scan_repository_action) self.el.addAction(scan_repository_action)
self.current_directory = "" self.current_directory = ""
open_file_action = QtGui.QAction("Open file outside repository", open_file_action = QtWidgets.QAction("Open file outside repository",
self.el) self.el)
open_file_action.triggered.connect( open_file_action.triggered.connect(
lambda: _OpenFileDialog(self, self.exp_manager, lambda: _OpenFileDialog(self, self.exp_manager,
experiment_db_ctl).open()) experiment_db_ctl).open())

View File

@ -4,7 +4,7 @@ import time
import re import re
from functools import partial from functools import partial
from quamash import QtGui, QtCore, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from artiq.gui.tools import (LayoutWidget, log_level_to_name, from artiq.gui.tools import (LayoutWidget, log_level_to_name,
QDockWidgetCloseDetect) QDockWidgetCloseDetect)
@ -148,46 +148,46 @@ class _LogDock(QDockWidgetCloseDetect):
grid = LayoutWidget() grid = LayoutWidget()
self.setWidget(grid) self.setWidget(grid)
grid.addWidget(QtGui.QLabel("Minimum level: "), 0, 0) grid.addWidget(QtWidgets.QLabel("Minimum level: "), 0, 0)
self.filter_level = QtGui.QComboBox() self.filter_level = QtWidgets.QComboBox()
self.filter_level.addItems(["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]) self.filter_level.addItems(["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"])
self.filter_level.setToolTip("Display entries at or above this level") self.filter_level.setToolTip("Display entries at or above this level")
grid.addWidget(self.filter_level, 0, 1) grid.addWidget(self.filter_level, 0, 1)
self.filter_level.currentIndexChanged.connect( self.filter_level.currentIndexChanged.connect(
self.filter_level_changed) self.filter_level_changed)
self.filter_freetext = QtGui.QLineEdit() self.filter_freetext = QtWidgets.QLineEdit()
self.filter_freetext.setPlaceholderText("freetext filter...") self.filter_freetext.setPlaceholderText("freetext filter...")
self.filter_freetext.editingFinished.connect( self.filter_freetext.editingFinished.connect(
self.filter_freetext_changed) self.filter_freetext_changed)
grid.addWidget(self.filter_freetext, 0, 2) grid.addWidget(self.filter_freetext, 0, 2)
scrollbottom = QtGui.QToolButton() scrollbottom = QtWidgets.QToolButton()
scrollbottom.setToolTip("Scroll to bottom") scrollbottom.setToolTip("Scroll to bottom")
scrollbottom.setIcon(QtGui.QApplication.style().standardIcon( scrollbottom.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_ArrowDown)) QtWidgets.QStyle.SP_ArrowDown))
grid.addWidget(scrollbottom, 0, 3) grid.addWidget(scrollbottom, 0, 3)
scrollbottom.clicked.connect(self.scroll_to_bottom) scrollbottom.clicked.connect(self.scroll_to_bottom)
newdock = QtGui.QToolButton() newdock = QtWidgets.QToolButton()
newdock.setToolTip("Create new log dock") newdock.setToolTip("Create new log dock")
newdock.setIcon(QtGui.QApplication.style().standardIcon( newdock.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_FileDialogNewFolder)) QtWidgets.QStyle.SP_FileDialogNewFolder))
# note the lambda, the default parameter is overriden otherwise # note the lambda, the default parameter is overriden otherwise
newdock.clicked.connect(lambda: manager.create_new_dock()) newdock.clicked.connect(lambda: manager.create_new_dock())
grid.addWidget(newdock, 0, 4) grid.addWidget(newdock, 0, 4)
grid.layout.setColumnStretch(2, 1) grid.layout.setColumnStretch(2, 1)
self.log = QtGui.QTableView() self.log = QtWidgets.QTableView()
self.log.setSelectionMode(QtGui.QAbstractItemView.NoSelection) self.log.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)
self.log.horizontalHeader().setResizeMode( self.log.horizontalHeader().setSectionResizeMode(
QtGui.QHeaderView.ResizeToContents) QtWidgets.QHeaderView.ResizeToContents)
self.log.horizontalHeader().setStretchLastSection(True) self.log.horizontalHeader().setStretchLastSection(True)
self.log.verticalHeader().setResizeMode( self.log.verticalHeader().setSectionResizeMode(
QtGui.QHeaderView.ResizeToContents) QtWidgets.QHeaderView.ResizeToContents)
self.log.verticalHeader().hide() self.log.verticalHeader().hide()
self.log.setHorizontalScrollMode( self.log.setHorizontalScrollMode(
QtGui.QAbstractItemView.ScrollPerPixel) QtWidgets.QAbstractItemView.ScrollPerPixel)
self.log.setVerticalScrollMode( self.log.setVerticalScrollMode(
QtGui.QAbstractItemView.ScrollPerPixel) QtWidgets.QAbstractItemView.ScrollPerPixel)
self.log.setShowGrid(False) self.log.setShowGrid(False)
self.log.setTextElideMode(QtCore.Qt.ElideNone) self.log.setTextElideMode(QtCore.Qt.ElideNone)
grid.addWidget(self.log, 1, 0, colspan=5) grid.addWidget(self.log, 1, 0, colspan=5)

View File

@ -1,4 +1,4 @@
from quamash import QtCore from PyQt5 import QtCore
from artiq.protocols.sync_struct import Subscriber from artiq.protocols.sync_struct import Subscriber

View File

@ -4,7 +4,7 @@ import socket
import struct import struct
from operator import itemgetter from operator import itemgetter
from quamash import QtGui, QtCore, QtWidgets from PyQt5 import QtCore, QtWidgets
from artiq.tools import TaskObject from artiq.tools import TaskObject
from artiq.protocols.sync_struct import Subscriber from artiq.protocols.sync_struct import Subscriber
@ -21,56 +21,56 @@ _mode_enc = {
} }
class _TTLWidget(QtGui.QFrame): class _TTLWidget(QtWidgets.QFrame):
def __init__(self, channel, send_to_device, force_out, title): def __init__(self, channel, send_to_device, force_out, title):
self.channel = channel self.channel = channel
self.send_to_device = send_to_device self.send_to_device = send_to_device
self.force_out = force_out self.force_out = force_out
QtGui.QFrame.__init__(self) QtWidgets.QFrame.__init__(self)
self.setFrameShape(QtGui.QFrame.Panel) self.setFrameShape(QtWidgets.QFrame.Panel)
self.setFrameShadow(QtGui.QFrame.Raised) self.setFrameShadow(QtWidgets.QFrame.Raised)
grid = QtGui.QGridLayout() grid = QtWidgets.QGridLayout()
self.setLayout(grid) self.setLayout(grid)
label = QtGui.QLabel(title) label = QtWidgets.QLabel(title)
label.setAlignment(QtCore.Qt.AlignCenter) label.setAlignment(QtCore.Qt.AlignCenter)
label.setWordWrap(True) label.setWordWrap(True)
grid.addWidget(label, 1, 1) grid.addWidget(label, 1, 1)
self._direction = QtGui.QLabel() self._direction = QtWidgets.QLabel()
self._direction.setAlignment(QtCore.Qt.AlignCenter) self._direction.setAlignment(QtCore.Qt.AlignCenter)
grid.addWidget(self._direction, 2, 1) grid.addWidget(self._direction, 2, 1)
self._override = QtGui.QLabel() self._override = QtWidgets.QLabel()
self._override.setAlignment(QtCore.Qt.AlignCenter) self._override.setAlignment(QtCore.Qt.AlignCenter)
grid.addWidget(self._override, 3, 1) grid.addWidget(self._override, 3, 1)
self._value = QtGui.QLabel() self._value = QtWidgets.QLabel()
self._value.setAlignment(QtCore.Qt.AlignCenter) self._value.setAlignment(QtCore.Qt.AlignCenter)
grid.addWidget(self._value, 4, 1, 6, 1) grid.addWidget(self._value, 4, 1, 6, 1)
self._value.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self._value.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
menu = QtGui.QActionGroup(self._value) menu = QtWidgets.QActionGroup(self._value)
menu.setExclusive(True) menu.setExclusive(True)
self._expctl_action = QtGui.QAction("Experiment controlled", self._value) self._expctl_action = QtWidgets.QAction("Experiment controlled", self._value)
self._expctl_action.setCheckable(True) self._expctl_action.setCheckable(True)
menu.addAction(self._expctl_action) menu.addAction(self._expctl_action)
self._value.addAction(self._expctl_action) self._value.addAction(self._expctl_action)
self._expctl_action.triggered.connect(lambda: self.set_mode("exp")) self._expctl_action.triggered.connect(lambda: self.set_mode("exp"))
separator = QtGui.QAction(self._value) separator = QtWidgets.QAction(self._value)
separator.setSeparator(True) separator.setSeparator(True)
self._value.addAction(separator) self._value.addAction(separator)
self._force1_action = QtGui.QAction("Force 1", self._value) self._force1_action = QtWidgets.QAction("Force 1", self._value)
self._force1_action.setCheckable(True) self._force1_action.setCheckable(True)
menu.addAction(self._force1_action) menu.addAction(self._force1_action)
self._value.addAction(self._force1_action) self._value.addAction(self._force1_action)
self._force1_action.triggered.connect(lambda: self.set_mode("1")) self._force1_action.triggered.connect(lambda: self.set_mode("1"))
self._force0_action = QtGui.QAction("Force 0", self._value) self._force0_action = QtWidgets.QAction("Force 0", self._value)
self._force0_action.setCheckable(True) self._force0_action.setCheckable(True)
menu.addAction(self._force0_action) menu.addAction(self._force0_action)
self._value.addAction(self._force0_action) self._value.addAction(self._force0_action)
self._force0_action.triggered.connect(lambda: self.set_mode("0")) self._force0_action.triggered.connect(lambda: self.set_mode("0"))
self._forcein_action = QtGui.QAction("Force input", self._value) self._forcein_action = QtWidgets.QAction("Force input", self._value)
self._forcein_action.setCheckable(True) self._forcein_action.setCheckable(True)
self._forcein_action.setEnabled(not force_out) self._forcein_action.setEnabled(not force_out)
menu.addAction(self._forcein_action) menu.addAction(self._forcein_action)
@ -117,24 +117,24 @@ class _TTLWidget(QtGui.QFrame):
self._expctl_action.setChecked(True) self._expctl_action.setChecked(True)
class _DDSWidget(QtGui.QFrame): class _DDSWidget(QtWidgets.QFrame):
def __init__(self, channel, sysclk, title): def __init__(self, channel, sysclk, title):
self.channel = channel self.channel = channel
self.sysclk = sysclk self.sysclk = sysclk
QtGui.QFrame.__init__(self) QtWidgets.QFrame.__init__(self)
self.setFrameShape(QtGui.QFrame.Panel) self.setFrameShape(QtWidgets.QFrame.Panel)
self.setFrameShadow(QtGui.QFrame.Raised) self.setFrameShadow(QtWidgets.QFrame.Raised)
grid = QtGui.QGridLayout() grid = QtWidgets.QGridLayout()
self.setLayout(grid) self.setLayout(grid)
label = QtGui.QLabel(title) label = QtWidgets.QLabel(title)
label.setAlignment(QtCore.Qt.AlignCenter) label.setAlignment(QtCore.Qt.AlignCenter)
label.setWordWrap(True) label.setWordWrap(True)
grid.addWidget(label, 1, 1) grid.addWidget(label, 1, 1)
self._value = QtGui.QLabel() self._value = QtWidgets.QLabel()
self._value.setAlignment(QtCore.Qt.AlignCenter) self._value.setAlignment(QtCore.Qt.AlignCenter)
self._value.setWordWrap(True) self._value.setWordWrap(True)
grid.addWidget(self._value, 2, 1, 6, 1) grid.addWidget(self._value, 2, 1, 6, 1)
@ -219,8 +219,8 @@ class _MonInjDock(QtWidgets.QDockWidget):
self.setFeatures(QtWidgets.QDockWidget.DockWidgetMovable | self.setFeatures(QtWidgets.QDockWidget.DockWidgetMovable |
QtWidgets.QDockWidget.DockWidgetFloatable) QtWidgets.QDockWidget.DockWidgetFloatable)
self.grid = QtGui.QGridLayout() self.grid = QtWidgets.QGridLayout()
gridw = QtGui.QWidget() gridw = QtWidgets.QWidget()
gridw.setLayout(self.grid) gridw.setLayout(self.grid)
self.setWidget(gridw) self.setWidget(gridw)

View File

@ -2,7 +2,7 @@ import asyncio
import time import time
from functools import partial from functools import partial
from quamash import QtGui, QtCore, QtWidgets from PyQt5 import QtCore, QtWidgets
from artiq.gui.models import DictSyncModel from artiq.gui.models import DictSyncModel
from artiq.tools import elide from artiq.tools import elide
@ -64,23 +64,23 @@ class ScheduleDock(QtWidgets.QDockWidget):
self.status_bar = status_bar self.status_bar = status_bar
self.schedule_ctl = schedule_ctl self.schedule_ctl = schedule_ctl
self.table = QtGui.QTableView() self.table = QtWidgets.QTableView()
self.table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) self.table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.table.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) self.table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.table.horizontalHeader().setResizeMode( self.table.horizontalHeader().setSectionResizeMode(
QtGui.QHeaderView.ResizeToContents) QtWidgets.QHeaderView.ResizeToContents)
self.table.verticalHeader().setResizeMode( self.table.verticalHeader().setSectionResizeMode(
QtGui.QHeaderView.ResizeToContents) QtWidgets.QHeaderView.ResizeToContents)
self.table.verticalHeader().hide() self.table.verticalHeader().hide()
self.setWidget(self.table) self.setWidget(self.table)
self.table.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.table.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
request_termination_action = QtGui.QAction("Request termination", self.table) request_termination_action = QtWidgets.QAction("Request termination", self.table)
request_termination_action.triggered.connect(partial(self.delete_clicked, True)) request_termination_action.triggered.connect(partial(self.delete_clicked, True))
request_termination_action.setShortcut("DELETE") request_termination_action.setShortcut("DELETE")
request_termination_action.setShortcutContext(QtCore.Qt.WidgetShortcut) request_termination_action.setShortcutContext(QtCore.Qt.WidgetShortcut)
self.table.addAction(request_termination_action) self.table.addAction(request_termination_action)
delete_action = QtGui.QAction("Delete", self.table) delete_action = QtWidgets.QAction("Delete", self.table)
delete_action.triggered.connect(partial(self.delete_clicked, False)) delete_action.triggered.connect(partial(self.delete_clicked, False))
delete_action.setShortcut("SHIFT+DELETE") delete_action.setShortcut("SHIFT+DELETE")
delete_action.setShortcutContext(QtCore.Qt.WidgetShortcut) delete_action.setShortcutContext(QtCore.Qt.WidgetShortcut)

View File

@ -1,7 +1,7 @@
import logging import logging
from functools import partial from functools import partial
from quamash import QtGui, QtCore, QtWidgets from PyQt5 import QtCore, QtWidgets
from artiq.gui.tools import LayoutWidget from artiq.gui.tools import LayoutWidget
@ -27,7 +27,7 @@ class ShortcutsDock(QtWidgets.QDockWidget):
self.shortcut_widgets = dict() self.shortcut_widgets = dict()
for n, title in enumerate(["Key", "Experiment"]): for n, title in enumerate(["Key", "Experiment"]):
label = QtGui.QLabel("<b>" + title + "</b>") label = QtWidgets.QLabel("<b>" + title + "</b>")
layout.addWidget(label, 0, n) layout.addWidget(label, 0, n)
label.setMaximumHeight(label.sizeHint().height()) label.setMaximumHeight(label.sizeHint().height())
layout.setColumnStretch(1, 1) layout.setColumnStretch(1, 1)
@ -35,28 +35,28 @@ class ShortcutsDock(QtWidgets.QDockWidget):
for i in range(12): for i in range(12):
row = i + 1 row = i + 1
layout.addWidget(QtGui.QLabel("F" + str(i+1)), row, 0) layout.addWidget(QtWidgets.QLabel("F" + str(i+1)), row, 0)
label = QtGui.QLabel() label = QtWidgets.QLabel()
label.setSizePolicy(QtGui.QSizePolicy.Ignored, label.setSizePolicy(QtWidgets.QSizePolicy.Ignored,
QtGui.QSizePolicy.Ignored) QtWidgets.QSizePolicy.Ignored)
layout.addWidget(label, row, 1) layout.addWidget(label, row, 1)
clear = QtGui.QToolButton() clear = QtWidgets.QToolButton()
clear.setIcon(QtGui.QApplication.style().standardIcon( clear.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_DialogResetButton)) QtWidgets.QStyle.SP_DialogResetButton))
layout.addWidget(clear, row, 2) layout.addWidget(clear, row, 2)
clear.clicked.connect(partial(self.set_shortcut, i, "")) clear.clicked.connect(partial(self.set_shortcut, i, ""))
open = QtGui.QToolButton() open = QtWidgets.QToolButton()
open.setIcon(QtGui.QApplication.style().standardIcon( open.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_DialogOpenButton)) QtWidgets.QStyle.SP_DialogOpenButton))
layout.addWidget(open, row, 3) layout.addWidget(open, row, 3)
open.clicked.connect(partial(self._open_experiment, i)) open.clicked.connect(partial(self._open_experiment, i))
submit = QtGui.QPushButton("Submit") submit = QtWidgets.QPushButton("Submit")
submit.setIcon(QtGui.QApplication.style().standardIcon( submit.setIcon(QtWidgets.QApplication.style().standardIcon(
QtGui.QStyle.SP_DialogOkButton)) QtWidgets.QStyle.SP_DialogOkButton))
layout.addWidget(submit, row, 4) layout.addWidget(submit, row, 4)
submit.clicked.connect(partial(self._activated, i)) submit.clicked.connect(partial(self._activated, i))

View File

@ -39,9 +39,9 @@ class QDockWidgetCloseDetect(QtWidgets.QDockWidget):
class LayoutWidget(QtWidgets.QWidget): class LayoutWidget(QtWidgets.QWidget):
def __init__(self, parent=None): def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent) QtWidgets.QWidget.__init__(self, parent)
self.layout = QtGui.QGridLayout() self.layout = QtWidgets.QGridLayout()
self.setLayout(self.layout) self.setLayout(self.layout)
def addWidget(self, item, row=None, col=None, rowspan=1, colspan=1): def addWidget(self, item, row=0, col=0, rowspan=1, colspan=1):
self.layout.addWidget(item, row, col, rowspan, colspan) self.layout.addWidget(item, row, col, rowspan, colspan)