Files
MenuPython_QT/QT5_Project/Shared_CODE/DialogModifyAlias.py

148 lines
5.5 KiB
Python

import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget, QDialog, QLabel, QVBoxLayout, QPushButton, QMessageBox, QComboBox, QDialogButtonBox, QShortcut
from PyQt5 import uic
from PyQt5.QtGui import QKeySequence
from PyQt5.QtCore import Qt, QEvent, QObject
import json
# from print_color import *
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
ui_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../Shared_UI'))
ui_file_path = os.path.join(ui_path, "DialogModifyAlias.ui")
class DialogModifyAlias(QDialog):
def __init__(self, main_window, parent=None):
super(DialogModifyAlias, self).__init__(parent)
# Load UI file
uic.loadUi(ui_file_path, self)
combo : QComboBox = self.comboBox
combo.clear()
self.alias_item_dict = {}
self.main_window = main_window
self.setWindowTitle("别名参数修改")
self.setWindowFlag(Qt.FramelessWindowHint)
self.buttonBox.button(QDialogButtonBox.Ok).setText('确定')
self.buttonBox.button(QDialogButtonBox.Cancel).setText('取消')
self.buttonBox.clicked.connect(self.dialog_button_ok_clicked)
#定义4个快捷键, Key_Enter, Key_Escape经常被各类程序模块使用, 用Key_End, 与Key_Home来代替
QShortcut(QKeySequence(Qt.Key_Up), self, activated=self.key_increase_parameter)
QShortcut(QKeySequence(Qt.Key_Down), self, activated=self.key_decrease_parameter)
QShortcut(QKeySequence(Qt.Key_PageDown), self, activated=self.key_enter_process)
QShortcut(QKeySequence(Qt.Key_PageUp), self, activated=self.key_escape_process)
QShortcut(QKeySequence(Qt.Key_End), self, activated=self.key_enter_process)
QShortcut(QKeySequence(Qt.Key_Home), self, activated=self.key_escape_process)
home_button = self.findChild(QPushButton, "KEY_HOME")
if home_button:
home_button.clicked.connect(self.key_escape_process)
end_button = self.findChild(QPushButton, "KEY_END")
if end_button:
end_button.clicked.connect(self.key_enter_process)
up_button = self.findChild(QPushButton, "KEY_UP")
if up_button:
up_button.clicked.connect(self.key_increase_parameter)
down_button = self.findChild(QPushButton, "KEY_DOWN")
if down_button:
down_button.clicked.connect(self.key_decrease_parameter)
def set_caption_name(self, name : str) :
label : QLabel = self.label
label.setText(name)
def key_increase_parameter(self):
combo : QComboBox = self.comboBox
index = combo.currentIndex()
index += 1
if index >= combo.count() :
index = 0
combo.setCurrentIndex(index)
def key_decrease_parameter(self):
combo : QComboBox = self.comboBox
index = combo.currentIndex()
index -= 1
if index < 0 :
index = combo.count() - 1
combo.setCurrentIndex(index)
def get_alias_key_str(self):
combo : QComboBox = self.comboBox
select_text = combo.currentText()
alias_key = None
for alias_key, alias_str in self.alias_item_dict.items() :
if alias_str == select_text :
return alias_key
return alias_key
@property
def value(self):
alias_key = self.get_alias_key_str()
return alias_key
def modify_alias_value(self, modify_str) :
if self.main_window != None :
if hasattr(self.main_window, "func_call_back_on_mqtt_param_modify") :
self.main_window.func_call_back_on_mqtt_param_modify(modify_str)
def key_enter_process(self):
alias_key = self.get_alias_key_str()
self.modify_alias_value(alias_key)
self.buttonBox.button(QDialogButtonBox.Ok).click()
def key_escape_process(self):
self.buttonBox.button(QDialogButtonBox.Cancel).click()
def set_alias_item_info(self, alias_item_dict, key_value, inform_message : str = "系统参数") :
combo : QComboBox = self.comboBox
self.alias_item_dict = alias_item_dict
combo.clear()
current_index = 0
select_index = -1
self.set_caption_name(inform_message)
for key, value_str in alias_item_dict.items() :
combo.addItem(value_str)
if key_value == key :
select_index = current_index
current_index += 1
if select_index >= 0 :
combo.setCurrentIndex(select_index)
else :
combo.setCurrentText(key_value)
def dialog_button_ok_clicked(self, button):
if button == self.buttonBox.button(QDialogButtonBox.Ok) :
alias_key = self.get_alias_key_str()
self.modify_alias_value(alias_key)
if __name__ == '__main__':
app = QApplication(sys.argv)
alias_select = {0 : "380V", 1 : "660V", 2: "1140V", 3 : "3300V"}
json_msg : str = json.dumps(alias_select, ensure_ascii=False)
# print_inform_msg(json_msg)
alias_2 = {"alias_voltage" : {0 : "380V", 1 : "660V", 2: "1140V", 3 : "3300V"}}
json_msg2 : str = json.dumps(alias_2, ensure_ascii=False)
# print_inform_msg(json_msg2)
dialog = DialogModifyAlias(None)
dialog.set_alias_item_info(alias_select, 1)
dialog.show()
result = dialog.exec_()
# if dialog.result() == QDialog.Accepted:
# print_inform_msg(dialog.get_alias_key_str()) # 输出: Button clicked
sys.exit(0)