-
Notifications
You must be signed in to change notification settings - Fork 77
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added an example for the pydm archiver time plot widget. Also added a…
… live data flag to the receiveNewValue method, so that the widget can be used to fetch live and archived or just archived data
- Loading branch information
Showing
306 changed files
with
14,290 additions
and
6,732 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
name: pre-commit | ||
|
||
on: | ||
pull_request: | ||
push: | ||
branches: [main] | ||
|
||
jobs: | ||
pre-commit: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-python@v3 | ||
- uses: pre-commit/action@v3.0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
repos: | ||
- repo: https://github.com/pre-commit/pre-commit-hooks | ||
rev: v4.4.0 | ||
hooks: | ||
- id: end-of-file-fixer | ||
files: '\.(py|txt)$' # Only run on .py and .txt files | ||
- id: trailing-whitespace | ||
files: '\.(py|txt)$' # Only run on .py and .txt files | ||
- repo: https://github.com/psf/black | ||
rev: 23.7.0 | ||
hooks: | ||
- id: black | ||
args: [--line-length, '120'] | ||
- repo: https://github.com/astral-sh/ruff-pre-commit | ||
rev: v0.0.287 | ||
hooks: | ||
- id: ruff | ||
args: [--line-length, '120', --fix, --exit-non-zero-on-fix] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,3 +5,4 @@ pytest-cov | |
pytest-timeout | ||
p4p | ||
pyca | ||
pre-commit |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+22.8 KB
docs/source/_static/tutorials/action/inline/inline_all_widgets_ok.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.
Oops, something went wrong.
Oops, something went wrong.
Oops, something went wrong.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
import os | ||
import json | ||
from pydm import Display | ||
from qtpy.QtWidgets import ( | ||
QVBoxLayout, | ||
QHBoxLayout, | ||
QGroupBox, | ||
QLabel, | ||
QLineEdit, | ||
QPushButton, | ||
QScrollArea, | ||
QFrame, | ||
QApplication, | ||
QWidget, | ||
) | ||
from qtpy import QtCore | ||
from pydm.widgets import PyDMEmbeddedDisplay | ||
|
||
|
||
class AllMotorsDisplay(Display): | ||
def __init__(self, parent=None, args=[], macros=None): | ||
super(AllMotorsDisplay, self).__init__(parent=parent, args=args, macros=None) | ||
# Placeholder for data to filter | ||
self.data = [] | ||
# Reference to the PyDMApplication | ||
self.app = QApplication.instance() | ||
# Assemble the Widgets | ||
self.setup_ui() | ||
# Load data from file | ||
self.load_data() | ||
|
||
def minimumSizeHint(self): | ||
# This is the default recommended size | ||
# for this screen | ||
return QtCore.QSize(750, 120) | ||
|
||
def ui_filepath(self): | ||
# No UI file is being used | ||
return None | ||
|
||
def setup_ui(self): | ||
# Create the main layout | ||
main_layout = QVBoxLayout() | ||
self.setLayout(main_layout) | ||
|
||
# Create a Label to be the title | ||
lbl_title = QLabel("Motors Diagnostic") | ||
# Add some StyleSheet to it | ||
lbl_title.setStyleSheet( | ||
"\ | ||
QLabel {\ | ||
qproperty-alignment: AlignCenter;\ | ||
border: 1px solid #FF17365D;\ | ||
border-top-left-radius: 15px;\ | ||
border-top-right-radius: 15px;\ | ||
background-color: #FF17365D;\ | ||
padding: 5px 0px;\ | ||
color: rgb(255, 255, 255);\ | ||
max-height: 25px;\ | ||
font-size: 14px;\ | ||
}" | ||
) | ||
|
||
# Add the title label to the main layout | ||
main_layout.addWidget(lbl_title) | ||
|
||
# Create the Search Panel layout | ||
search_layout = QHBoxLayout() | ||
|
||
# Create a GroupBox with "Filtering" as Title | ||
gb_search = QGroupBox(parent=self) | ||
gb_search.setTitle("Filtering") | ||
gb_search.setLayout(search_layout) | ||
|
||
# Create a label, line edit and button for filtering | ||
lbl_search = QLabel(text="Filter: ") | ||
self.txt_filter = QLineEdit() | ||
self.txt_filter.returnPressed.connect(self.do_search) | ||
btn_search = QPushButton() | ||
btn_search.setText("Search") | ||
btn_search.clicked.connect(self.do_search) | ||
|
||
# Add the created widgets to the layout | ||
search_layout.addWidget(lbl_search) | ||
search_layout.addWidget(self.txt_filter) | ||
search_layout.addWidget(btn_search) | ||
|
||
# Add the Groupbox to the main layout | ||
main_layout.addWidget(gb_search) | ||
|
||
# Create the Results Layout | ||
self.results_layout = QVBoxLayout() | ||
self.results_layout.setContentsMargins(0, 0, 0, 0) | ||
|
||
# Create a Frame to host the results of search | ||
self.frm_result = QFrame(parent=self) | ||
self.frm_result.setLayout(self.results_layout) | ||
|
||
# Create a ScrollArea so we can properly handle | ||
# many entries | ||
scroll_area = QScrollArea(parent=self) | ||
scroll_area.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) | ||
scroll_area.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) | ||
scroll_area.setWidgetResizable(True) | ||
|
||
# Add the Frame to the scroll area | ||
scroll_area.setWidget(self.frm_result) | ||
|
||
# Add the scroll area to the main layout | ||
main_layout.addWidget(scroll_area) | ||
|
||
def load_data(self): | ||
# Extract the directory of this file... | ||
base_dir = os.path.dirname(os.path.realpath(__file__)) | ||
# Concatenate the directory with the file name... | ||
data_file = os.path.join(base_dir, "motor_db.txt") | ||
# Open the file so we can read the data... | ||
with open(data_file, "r") as f: | ||
# For each line in the file... | ||
for entry in f.readlines(): | ||
# Append to the list of data... | ||
self.data.append(entry[:-1]) | ||
|
||
def do_search(self): | ||
# For each widget inside the results frame, lets destroy them | ||
for widget in self.frm_result.findChildren(QWidget): | ||
widget.setParent(None) | ||
widget.deleteLater() | ||
|
||
# Grab the filter text | ||
filter_text = self.txt_filter.text() | ||
|
||
# For every entry in the dataset... | ||
for entry in self.data: | ||
# Check if they match our filter | ||
if filter_text.upper() not in entry.upper(): | ||
continue | ||
# Create a PyDMEmbeddedDisplay for this entry | ||
disp = PyDMEmbeddedDisplay(parent=self) | ||
disp.macros = json.dumps({"MOTOR": entry}) | ||
disp.filename = "inline_motor.ui" | ||
disp.setMinimumWidth(700) | ||
disp.setMinimumHeight(40) | ||
disp.setMaximumHeight(100) | ||
# Add the Embedded Display to the Results Layout | ||
self.results_layout.addWidget(disp) |
Oops, something went wrong.