本文整理汇总了Python中PyQt5.QtWidgets.QSplitter.setHandleWidth方法的典型用法代码示例。如果您正苦于以下问题:Python QSplitter.setHandleWidth方法的具体用法?Python QSplitter.setHandleWidth怎么用?Python QSplitter.setHandleWidth使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PyQt5.QtWidgets.QSplitter
的用法示例。
在下文中一共展示了QSplitter.setHandleWidth方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from PyQt5.QtWidgets import QSplitter [as 别名]
# 或者: from PyQt5.QtWidgets.QSplitter import setHandleWidth [as 别名]
class Ui:
def __init__(self, app):
self._app = app
self._layout = QVBoxLayout(app)
self._bottom_layout = QHBoxLayout()
self._top_separator = Separator(parent=app)
self._splitter = QSplitter(app)
if use_mac_theme():
self._splitter.setHandleWidth(0)
# NOTE: 以位置命名的部件应该只用来组织界面布局,不要
# 给其添加任何功能性的函数
self.top_panel = TopPanel(app, app)
self._left_panel_container = QScrollArea(self._app)
self._left_panel_container.setWidgetResizable(True)
self.left_panel = LeftPanel(self._app, self._splitter)
self._left_panel_container.setWidget(self.left_panel)
self.right_panel = RightPanel(self._app, self._splitter)
# alias
self.pc_panel = self.top_panel.pc_panel
self.table_container = self.right_panel.table_container
self.magicbox = MagicBox(self._app)
# 对部件进行一些 UI 层面的初始化
self._splitter.addWidget(self._left_panel_container)
self._splitter.addWidget(self.right_panel)
self.right_panel.setMinimumWidth(780)
self._left_panel_container.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
self.right_panel.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
if use_mac_theme():
self._layout.addWidget(self.magicbox)
self._layout.addWidget(self._splitter)
self._layout.addWidget(self._top_separator)
self._layout.addWidget(self.top_panel)
else:
self._layout.addWidget(self.top_panel)
self._layout.addWidget(self._top_separator)
self._layout.addWidget(self._splitter)
self._layout.addWidget(self.magicbox)
# self._layout.addLayout(self._bottom_layout)
# self._bottom_layout.addWidget(self.magicbox)
self._layout.setSpacing(0)
self._layout.setContentsMargins(0, 0, 0, 0)
self.top_panel.layout().setSpacing(0)
self.top_panel.layout().setContentsMargins(0, 0, 0, 0)
self.pc_panel.playlist_btn.clicked.connect(self.show_player_playlist)
self._app.hotkey_manager.registe(
[QKeySequence('Ctrl+F'), QKeySequence(':'), QKeySequence('Alt+x')],
self.magicbox.setFocus
)
def show_player_playlist(self):
songs = self._app.playlist.list()
self.table_container.show_player_playlist(songs)
示例2: sig_to_stems_clicked
# 需要导入模块: from PyQt5.QtWidgets import QSplitter [as 别名]
# 或者: from PyQt5.QtWidgets.QSplitter import setHandleWidth [as 别名]
def sig_to_stems_clicked(self, row):
signature = self.sig_to_stems_major_table.item(row, 0).text()
print(signature)
signature = tuple(signature.split(SEP_SIG))
stems = sorted(self.lexicon.signatures_to_stems()[signature])
number_of_stems_per_column = 5
# create a master list of sublists, where each sublist contains k stems
# k = number_of_stems_per_column
stem_rows = list()
stem_row = list()
for i, stem in enumerate(stems, 1):
stem_row.append(stem)
if not i % number_of_stems_per_column:
stem_rows.append(stem_row)
stem_row = list()
if stem_row:
stem_rows.append(stem_row)
# set up the minor table as table widget
sig_to_stems_minor_table = QTableWidget()
sig_to_stems_minor_table.horizontalHeader().hide()
sig_to_stems_minor_table.verticalHeader().hide()
sig_to_stems_minor_table.clear()
sig_to_stems_minor_table.setRowCount(len(stem_rows))
sig_to_stems_minor_table.setColumnCount(number_of_stems_per_column)
# fill in the minor table
for row, stem_row in enumerate(stem_rows):
for col, stem in enumerate(stem_row):
item = QTableWidgetItem(stem)
sig_to_stems_minor_table.setItem(row, col, item)
sig_to_stems_minor_table.resizeColumnsToContents()
minor_table_title = QLabel('{} (number of stems: {})'
.format(SEP_SIG.join(signature), len(stems)))
minor_table_widget_with_title = QWidget()
layout = QVBoxLayout()
layout.addWidget(minor_table_title)
layout.addWidget(sig_to_stems_minor_table)
minor_table_widget_with_title.setLayout(layout)
new_display = QSplitter(Qt.Horizontal)
new_display.setHandleWidth(10)
new_display.setChildrenCollapsible(False)
new_display.addWidget(self.sig_to_stems_major_table)
new_display.addWidget(minor_table_widget_with_title)
new_display_width = self.majorDisplay.width() / 2
new_display.setSizes(
[new_display_width * 0.4, new_display_width * 0.6])
self.load_main_window(major_display=new_display)
self.status.clearMessage()
self.status.showMessage('{} selected'.format(signature))
示例3: set_splitter_stylesheet
# 需要导入模块: from PyQt5.QtWidgets import QSplitter [as 别名]
# 或者: from PyQt5.QtWidgets.QSplitter import setHandleWidth [as 别名]
def set_splitter_stylesheet(splitter: QSplitter):
splitter.setHandleWidth(4)
bgcolor = constants.BGCOLOR.lighter(150)
r, g, b, a = bgcolor.red(), bgcolor.green(), bgcolor.blue(), bgcolor.alpha()
splitter.setStyleSheet("QSplitter::handle:vertical {{margin: 4px 0px; "
"background-color: qlineargradient(x1:0, y1:0, x2:1, y2:0, "
"stop:0.2 rgba(255, 255, 255, 0),"
"stop:0.5 rgba({0}, {1}, {2}, {3}),"
"stop:0.8 rgba(255, 255, 255, 0));"
"image: url(:/icons/icons/splitter_handle_horizontal.svg);}}"
"QSplitter::handle:horizontal {{margin: 4px 0px; "
"background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, "
"stop:0.2 rgba(255, 255, 255, 0),"
"stop:0.5 rgba({0}, {1}, {2}, {3}),"
"stop:0.8 rgba(255, 255, 255, 0));"
"image: url(:/icons/icons/splitter_handle_vertical.svg);}}".format(r, g, b, a))
示例4: setupViews
# 需要导入模块: from PyQt5.QtWidgets import QSplitter [as 别名]
# 或者: from PyQt5.QtWidgets.QSplitter import setHandleWidth [as 别名]
def setupViews(self):
splitter = QSplitter()
splitter.setHandleWidth(5)
browsers = QTabWidget()
label = QLabel('Placeholder')
label.setAlignment(Qt.AlignCenter|Qt.AlignHCenter|Qt.AlignVCenter)
layout = QHBoxLayout()
layout.addWidget(label)
rightPane = QWidget()
rightPane.setLayout(layout)
splitter.addWidget(browsers)
splitter.addWidget(rightPane)
splitter.setStretchFactor(0, 1)
splitter.setStretchFactor(1, 1)
self.setCentralWidget(splitter)
示例5: EditorWidget
# 需要导入模块: from PyQt5.QtWidgets import QSplitter [as 别名]
# 或者: from PyQt5.QtWidgets.QSplitter import setHandleWidth [as 别名]
class EditorWidget(QWidget):
device_and_data_signal = pyqtSignal(list, int, name="device_list_signal")
import_list_signal = pyqtSignal(set, name="import_list_signal")
close_cancel_signal = pyqtSignal(name="close_cancel_signal")
def __init__(self, refresh_signal, tester, case_id=None, *args, **kwargs):
super().__init__(*args, **kwargs)
ui_dir_path = os.path.dirname(__file__)
ui_file_path = os.path.join(ui_dir_path, 'case_editor.ui')
uic.loadUi(ui_file_path, self)
self.dBCommandLineHelper = DBCommandLineHelper()
self.tester = tester
self.config = self.tester.get_config()
self.debug_runner = self.tester.get_debug_runner()
self.case_id = case_id
self.refresh_signal = refresh_signal
self.init_ui()
self.is_log_show = True
self.is_running = False
self.tag_list = []
self.parsed_line_list = []
self.case = None
self.high_lighter = None
self.tag_manage_widget = None
self.add_device_widget = None
self.message_box = QMessageBox()
self.add_tag_button = SearchButton()
self.tag_names_line_edit = TagLineEdit("tag_names_line_edit", self.add_tag_button)
self.set_tag_name_completer()
self.splitter = QSplitter(Qt.Vertical)
self.splitter.setHandleWidth(1) # set handle width
self.editor_text_edit = TextEdit(self.debug_runner.core) # case content TextEdit
self.console = Console()
# Add the 'editor text edit' and 'console' to splitter
self.splitter.addWidget(self.editor_text_edit)
self.splitter.addWidget(self.console)
# Set the initial scale: 4:1
self.splitter.setStretchFactor(0, 4)
self.splitter.setStretchFactor(1, 1)
self.editor_layout.addWidget(self.splitter)
self.import_list_signal.connect(self.editor_text_edit.get_import_from_content, Qt.QueuedConnection)
self.editor_text_edit.parse_error_info_signal.connect(self.add_info_console, Qt.QueuedConnection)
self.editor_adapter() # set completer and highlighter
self.set_case_edit_data() # update case
# run status listener
self.status_listener = EditorRunStatusListener()
self.status_listener.editor_listener_msg_signal.connect(self.result_handle, Qt.QueuedConnection)
self.debug_runner.listener = self.status_listener
self.data_line = None
# button event
self.save_btn.clicked.connect(self.save_case)
self.run_btn.clicked.connect(self.run_btn_event)
self.console_btn.clicked.connect(self.log_show_hide_event)
self.edit_data_btn.clicked.connect(self.add_case_data)
self.add_tag_button.clicked.connect(self.choose_event)
# case data
self.case_manager = CaseManager()
self.case_data_manage = CaseDataManager()
self.case_data_count = 0 # init case data count
self.is_case_data_modify = False
def init_ui(self):
"""
init ui, include: resize window
:return:
"""
screen = QDesktopWidget().screenGeometry()
self.resize(screen.width() / 2, screen.height() / 2)
self.init_btn_icon()
self.id_line_edit.hide() # hide line_edit
self.case_name_line_edit.setPlaceholderText("Case Name")
def init_btn_icon(self):
"""
init button icon, including: save button、run button、show/hide console button
:return:
"""
save_icon = QIcon()
save_icon.addPixmap(QPixmap(self.config.images + '/save.png'), QIcon.Normal, QIcon.Off) # save icon
self.save_btn.setIcon(save_icon)
run_icon = QIcon()
run_icon.addPixmap(QPixmap(self.config.images + '/run.png'), QIcon.Normal, QIcon.Off) # run icon
self.run_btn.setIcon(run_icon)
#.........这里部分代码省略.........
示例6: MainWindow
# 需要导入模块: from PyQt5.QtWidgets import QSplitter [as 别名]
# 或者: from PyQt5.QtWidgets.QSplitter import setHandleWidth [as 别名]
#.........这里部分代码省略.........
ancestor = QTreeWidgetItem(self.lexicon_tree, [MANIFOLDS])
self.lexicon_tree.expandItem(ancestor)
for item in [WORD_NEIGHBORS, VISUALIZED_GRAPH]:
self.lexicon_tree.expandItem(QTreeWidgetItem(ancestor, [item]))
self.status.clearMessage()
self.status.showMessage('Navigation tree populated')
print('Lexicon navigation tree populated', flush=True)
def load_main_window(self, major_display=None, parameter_window=None):
"""
Refresh the main window for the updated display content
(most probably after a click or some event is triggered)
"""
# get sizes of the three major PyQt objects
major_display_size = self.majorDisplay.size()
parameter_window_size = self.parameterWindow.size()
lexicon_tree_size = self.lexicon_tree.size()
if major_display:
self.majorDisplay = major_display
if parameter_window:
self.parameterWindow = parameter_window
# apply sizes to the major three objects
self.majorDisplay.resize(major_display_size)
self.parameterWindow.resize(parameter_window_size)
self.lexicon_tree.resize(lexicon_tree_size)
# set up:
# 1) main splitter (b/w lexicon-tree+parameter window and major display)
# 2) minor splitter (b/w lexicon-tree and parameter window)
self.mainSplitter = QSplitter(Qt.Horizontal)
self.mainSplitter.setHandleWidth(10)
self.mainSplitter.setChildrenCollapsible(False)
self.minorSplitter = QSplitter(Qt.Vertical)
self.minorSplitter.setHandleWidth(10)
self.minorSplitter.setChildrenCollapsible(False)
self.minorSplitter.addWidget(self.lexicon_tree)
self.minorSplitter.addWidget(self.parameterWindow)
self.mainSplitter.addWidget(self.minorSplitter)
self.mainSplitter.addWidget(self.majorDisplay)
self.setCentralWidget(self.mainSplitter)
def sig_to_stems_clicked(self, row):
signature = self.sig_to_stems_major_table.item(row, 0).text()
print(signature)
signature = tuple(signature.split(SEP_SIG))
stems = sorted(self.lexicon.signatures_to_stems()[signature])
number_of_stems_per_column = 5
# create a master list of sublists, where each sublist contains k stems
# k = number_of_stems_per_column
stem_rows = list()
stem_row = list()
for i, stem in enumerate(stems, 1):
stem_row.append(stem)
if not i % number_of_stems_per_column:
stem_rows.append(stem_row)
stem_row = list()
示例7: App
# 需要导入模块: from PyQt5.QtWidgets import QSplitter [as 别名]
# 或者: from PyQt5.QtWidgets.QSplitter import setHandleWidth [as 别名]
class App(QWidget):
def __init__(self, lang='en'):
super().__init__()
self.params = Params(lang)
self.initUI()
def initUI(self):
self.txt2func = {
'はじめに': Introduction, 'Introduction': Introduction,
'分析タスク': TypeOfTask, 'Task': TypeOfTask,
'入力データ': SetFile, 'Input data': SetFile,
'データの確認': DataCheck, 'Data check': DataCheck,
'過学習': Overfitting, 'Overfitting': Overfitting,
'分析の実行': Analysis, 'Analysis': Analysis,
'結果の確認': Results, 'Results': Results,
'バイアスとバリアンス': BiasVariance, 'Bias and Variance': BiasVariance,
'学習曲線': LearningCurve, 'Learning curve': LearningCurve,
'特徴量選択': FeatureSelection, 'Feature selection': FeatureSelection,
'結果の確認2': Results2, 'Results 2': Results2,
'学習曲線2': LearningCurve2, 'Learning curve 2': LearningCurve2,
'予測': Prediction, 'Prediction': Prediction,
'Error': Error}
self.setMinimumSize(1280, 960)
self.setStyleSheet('background-color: rgb(242, 242, 242)')
vbox = QVBoxLayout(self)
vbox.setSpacing(0)
vbox.setContentsMargins(0, 0, 0, 0)
top = QFrame(self)
top.setFrameShape(QFrame.StyledPanel)
top.setFixedHeight(50)
top.setStyleSheet('background-color: white')
self.splitter = QSplitter(Qt.Horizontal, self)
self.splitter.setHandleWidth(0)
self.menuview = MenuView(self.splitter, self.update_content,
self.params)
self.menuview.setWidgetResizable(True)
self.contentview = Introduction(self.splitter,
self.menuview.edit_button, self.params)
self.contentview.setWidgetResizable(True)
self.splitter.addWidget(self.menuview)
self.splitter.addWidget(self.contentview)
vbox.addWidget(top)
vbox.addWidget(self.splitter)
self.setLayout(vbox)
self.center()
# self.showMaximized()
self.setWindowTitle('MALSS interactive')
self.show()
def center(self):
# Get a rectangle of the main window.
qr = self.frameGeometry()
# Figure out the screen resolution; and from this resolution,
# get the center point (x, y)
cp = QDesktopWidget().availableGeometry().center()
# Set the center of the rectangle to the center of the screen.
qr.moveCenter(cp)
self.move(qr.topLeft())
def update_content(self, text):
content = self.splitter.widget(1)
if content is not None:
if text in self.txt2func:
content.hide()
content.deleteLater()
self.contentview =\
self.txt2func[text](self.splitter,
self.menuview.edit_button,
self.params)
self.contentview.setWidgetResizable(True)
self.splitter.addWidget(self.contentview)
示例8: RunWidget
# 需要导入模块: from PyQt5.QtWidgets import QSplitter [as 别名]
# 或者: from PyQt5.QtWidgets.QSplitter import setHandleWidth [as 别名]
class RunWidget(QWidget):
running = False
device_list_signal = pyqtSignal(list, name="device_list_signal")
cases = []
def __init__(self, tester, *args, **kwargs):
super().__init__(*args, **kwargs)
ui_dir_path = os.path.dirname(__file__)
ui_file_path = os.path.join(ui_dir_path, 'case_run.ui')
uic.loadUi(ui_file_path, self)
# set icon
run_icon = QIcon()
self.tester = tester
self.config = self.tester.get_config()
run_icon.addPixmap(QPixmap(self.config.images + '/run.png'), QIcon.Normal, QIcon.Off)
self.run_stop_btn.setIcon(run_icon)
add_icon = QIcon()
add_icon.addPixmap(QPixmap(self.config.images + '/add.png'), QIcon.Normal, QIcon.Off)
self.addbtn.setIcon(add_icon)
self.message_box = QMessageBox()
self.dBCommandLineHelper = DBCommandLineHelper()
self.addbtn.clicked.connect(self.click_add_case)
self.run_stop_btn.clicked.connect(self.click_run_stop_btn)
self.add_case_widget = None
self.add_device_widget = None
self.splitter = None
self.case_widget = RunnerTableWidget([], [0])
self.log_area = Console()
self.splitter_setting()
self.status_listener = CaseRunStatusListener()
self.status_listener.listener_msg_signal.connect(self.update_case_name_color, Qt.QueuedConnection)
self.tester.add_run_status_listener(self.status_listener)
def splitter_setting(self):
"""
set splitter
:return:
"""
if self.splitter:
self.splitter = None
self.splitter = QSplitter(Qt.Vertical)
self.splitter.setHandleWidth(1)
# add "case_widget" and "log_area" to splitter
self.splitter.addWidget(self.case_widget)
self.splitter.addWidget(self.log_area)
# set the initial scale: 4:1
self.splitter.setStretchFactor(0, 4)
self.splitter.setStretchFactor(1, 1)
self.case_table_layout.addWidget(self.splitter)
def click_add_case(self):
"""
click the button to show add case widget
:return:
"""
self.add_case_widget = AddCaseWidget()
self.add_case_widget.select_case_signal.connect(self.show_cases, Qt.QueuedConnection)
self.add_case_widget.setWindowModality(Qt.ApplicationModal)
self.add_case_widget.show()
def click_run_stop_btn(self):
"""
start or stop to run case
:return:
"""
devices = []
if self.running:
self.stop_case()
return
if not self.cases: # cases is null
self.message_box.warning(self, "Message", "Please add cases first.", QMessageBox.Ok)
return
try:
devices = self.tester.devices()
except Exception as e:
self.add_log("<font color='red'>" + str(e) + "</font>")
if not devices: # There is no device connected
self.message_box.warning(self, "Message", "Please connect the device to your computer.", QMessageBox.Ok)
return
self.add_device_widget = AddDeviceWidget()
self.add_device_widget.setWindowModality(Qt.ApplicationModal)
self.add_device_widget.add_log_signal.connect(self.add_log, Qt.QueuedConnection)
self.add_device_widget.run_case_signal.connect(self.run_case, Qt.QueuedConnection)
self.device_list_signal.connect(self.add_device_widget.add_radio_to_widget, Qt.QueuedConnection)
self.add_device_widget.show()
try:
self.device_list_signal.emit(devices)
except Exception as e:
self.add_log("<font color='red'><pre>" + str(e) + "</pre></font>")
#.........这里部分代码省略.........
示例9: SignalTabController
# 需要导入模块: from PyQt5.QtWidgets import QSplitter [as 别名]
# 或者: from PyQt5.QtWidgets.QSplitter import setHandleWidth [as 别名]
class SignalTabController(QWidget):
frame_closed = pyqtSignal(SignalFrameController)
not_show_again_changed = pyqtSignal()
signal_created = pyqtSignal(Signal)
files_dropped = pyqtSignal(list)
frame_was_dropped = pyqtSignal(int, int)
@property
def num_frames(self):
return self.splitter.count() - 1
@property
def signal_frames(self):
"""
:rtype: list of SignalFrameController
"""
return [self.splitter.widget(i) for i in range(self.num_frames)]
@property
def signal_undo_stack(self):
return self.undo_stack
def __init__(self, project_manager, parent=None):
super().__init__(parent)
self.ui = Ui_Interpretation()
self.ui.setupUi(self)
self.splitter = QSplitter()
self.splitter.setStyleSheet("QSplitter::handle:vertical {\nmargin: 4px 0px; background-color: qlineargradient(x1:0, y1:0, x2:1, y2:0, \nstop:0 rgba(255, 255, 255, 0), \nstop:0.5 rgba(100, 100, 100, 100), \nstop:1 rgba(255, 255, 255, 0));\n image: url(:/icons/data/icons/splitter_handle_horizontal.svg);\n}")
self.splitter.setOrientation(Qt.Vertical)
self.splitter.setChildrenCollapsible(True)
self.splitter.setHandleWidth(6)
placeholder_widget = QWidget()
placeholder_widget.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)
self.undo_stack = QUndoStack()
self.project_manager = project_manager
self.splitter.addWidget(placeholder_widget)
self.signal_vlay = QVBoxLayout()
self.signal_vlay.setContentsMargins(0,0,0,0)
self.signal_vlay.addWidget(self.splitter)
self.ui.scrlAreaSignals.setLayout(self.signal_vlay)
self.drag_pos = None
def on_files_dropped(self, files):
self.files_dropped.emit(files)
def close_frame(self, frame:SignalFrameController):
self.frame_closed.emit(frame)
def add_signal_frame(self, proto_analyzer):
sig_frame = SignalFrameController(proto_analyzer, self.undo_stack, self.project_manager, parent=self)
sframes = self.signal_frames
if len(proto_analyzer.signal.filename) == 0:
# new signal from "create signal from selection"
sig_frame.ui.btnSaveSignal.show()
self.__create_connects_for_signal_frame(signal_frame=sig_frame)
sig_frame.signal_created.connect(self.signal_created.emit)
sig_frame.not_show_again_changed.connect(self.not_show_again_changed.emit)
sig_frame.ui.lineEditSignalName.setToolTip(self.tr("Sourcefile: ") + proto_analyzer.signal.filename)
sig_frame.apply_to_all_clicked.connect(self.on_apply_to_all_clicked)
prev_signal_frame = sframes[-1] if len(sframes) > 0 else None
if prev_signal_frame is not None and hasattr(prev_signal_frame, "ui"):
sig_frame.ui.cbProtoView.setCurrentIndex(prev_signal_frame.ui.cbProtoView.currentIndex())
sig_frame.blockSignals(True)
if proto_analyzer.signal.qad_demod_file_loaded:
sig_frame.ui.cbSignalView.setCurrentIndex(1)
sig_frame.ui.cbSignalView.setDisabled(True)
self.splitter.insertWidget(self.num_frames, sig_frame)
sig_frame.blockSignals(False)
default_view = constants.SETTINGS.value('default_view', 0, int)
sig_frame.ui.cbProtoView.setCurrentIndex(default_view)
return sig_frame
def __create_connects_for_signal_frame(self, signal_frame: SignalFrameController):
signal_frame.hold_shift = constants.SETTINGS.value('hold_shift_to_drag', False, type=bool)
signal_frame.drag_started.connect(self.frame_dragged)
signal_frame.frame_dropped.connect(self.frame_dropped)
signal_frame.files_dropped.connect(self.on_files_dropped)
signal_frame.closed.connect(self.close_frame)
def add_empty_frame(self, filename: str, proto):
sig_frame = SignalFrameController(proto_analyzer=proto, undo_stack=self.undo_stack,
project_manager=self.project_manager, proto_bits=proto.decoded_proto_bits_str,
parent=self)
sig_frame.ui.lineEditSignalName.setText(filename)
sig_frame.setMinimumHeight(sig_frame.height())
sig_frame.set_empty_frame_visibilities()
#.........这里部分代码省略.........
示例10: OTMainWindow
# 需要导入模块: from PyQt5.QtWidgets import QSplitter [as 别名]
# 或者: from PyQt5.QtWidgets.QSplitter import setHandleWidth [as 别名]
class OTMainWindow(QWidget):
def __init__(self, parent=None):
super(OTMainWindow, self).__init__(parent, Qt.Window)
self.setWindowTitle('OPC Python Tester')
self.layout = QVBoxLayout()
#
self.tree = QTreeWidget(self)
self.tree.setHeaderLabel('OPC server tree')
self.tree_root = QTreeWidgetItem()
self.tree_root.setText(0, 'not connected')
self.tree.addTopLevelItem(self.tree_root)
self.tree.itemDoubleClicked.connect(self.on_tree_item_double_clicked)
#
self.table = QTableWidget(self)
self.table.setRowCount(0)
self.table_column_labels = [
'item_id', 'value', 'type', 'access', 'quality', 'timestamp']
self.table.setColumnCount(len(self.table_column_labels))
self.table.setHorizontalHeaderLabels(self.table_column_labels)
self.table.horizontalHeader().setStretchLastSection(True)
#
self.splitter = QSplitter(Qt.Horizontal, self)
self.splitter.setChildrenCollapsible(False)
self.splitter.setHandleWidth(10)
self.layout.addWidget(self.splitter)
# final
self.splitter.addWidget(self.tree)
self.splitter.addWidget(self.table)
self.splitter.setSizes([150, 300])
self.setLayout(self.layout)
# self.opcsrv = None
self.cur_server_info = {}
self.cur_comp_name = ''
self.watched_itemids = []
self.ssdialog = ServerSelectDialog(self)
ssel_ret = self.ssdialog.exec_()
if ssel_ret == QDialog.Accepted:
self.do_connect(self.ssdialog.selected_server, self.ssdialog.selected_comp_name)
else:
print('Connection cancelled')
self.timer = QTimer(self)
self.timer.timeout.connect(self.on_timer_timeout)
self.timer.start(1000) # every 1 second
def do_connect(self, srv_info: dict, comp_name: str):
print('Connecting to "{0}" ({1}) on comp: {2}...'.format(
srv_info['desc'], srv_info['guid'], comp_name))
self.opcsrv = opc_helper.opc_connect(srv_info['guid'], comp_name)
if self.opcsrv is None:
return
self.cur_comp_name = comp_name
self.cur_server_info = srv_info
print(self.opcsrv.get_status())
self.fill_tree()
def fill_tree(self):
self.tree.clear()
if self.opcsrv is None:
return
self.tree_root = QTreeWidgetItem(self.tree)
self.tree_root.setChildIndicatorPolicy(QTreeWidgetItem.DontShowIndicatorWhenChildless)
root_title = '{0}'.format(self.cur_server_info['desc'])
if self.cur_comp_name != '':
root_title = '{0} ({1})'.format(self.cur_server_info['desc'], self.cur_comp_name)
self.tree_root.setText(0, root_title)
self.tree.addTopLevelItem(self.tree_root)
server_tree = self.opcsrv.browse(flat=False)
#
for oitem in server_tree:
self.fill_item(oitem, self.tree_root)
def fill_item(self, item: dict, parent: QTreeWidgetItem):
tree_item = QTreeWidgetItem()
tree_item.setChildIndicatorPolicy(QTreeWidgetItem.DontShowIndicatorWhenChildless)
tree_item.setText(0, item['name'])
if item['children'] is None:
# set userdata = item_id only if this IS a LEAF node
tree_item.setData(0, Qt.UserRole, item['item_id']) # column, role, data
parent.addChild(tree_item)
# recurse into children
if item['children'] is not None:
for oitem in item['children']:
self.fill_item(oitem, tree_item)
@pyqtSlot(QTreeWidgetItem, int)
def on_tree_item_double_clicked(self, item: QTreeWidgetItem, column: int):
# void itemDoubleClicked(QTreeWidgetItem * item, int column)
# virtual QVariant data(int column, int role) const
item_data = item.data(0, Qt.UserRole)
if item_data is None:
return
item_id = str(item_data)
print('Double click on [{0}]'.format(item_id))
self.opcsrv.get_item(item_id)
if item_id not in self.watched_itemids:
self.watched_itemids.append(item_id)
#.........这里部分代码省略.........