import sys
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import (
QApplication,
QVBoxLayout,
QLabel,
QTabWidget,
QWidget,
QInputDialog,
QPushButton,
QGridLayout,
)
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("频点转换")
OuterLayout = QVBoxLayout() # 创建整体最外层的垂直分布
self.setLayout(OuterLayout)
tabs = QTabWidget()
tabs.addTab(self.Channel_to_Freq_UI(), "Channel to Freq")
writer_label = QLabel('@rambo.gj.zhong@mail.foxconn.com',self)
writer_label.setFont(QFont("Calibri",12))
OuterLayout.addWidget(tabs)
OuterLayout.addWidget(writer_label)
def Channel_to_Freq_UI(self):
Channel_op = QWidget()
layout = QVBoxLayout()
Channel_op.setLayout(layout)
tabsCTF = QTabWidget()
tabsCTF.addTab(self.GSM_CTF_UI(),"GSM")
tabsCTF.addTab(self.WCDMA_CTF_UI(),"WCDMA")
tabsCTF.addTab(self.LTE_CTF_UI(),"LTE")
tabsCTF.addTab(self.NR_CTF_UI(),"NR")
layout.addWidget(tabsCTF)
return Channel_op
######### --- 设置 GSM页面
def GSM_CTF_UI(self):
GSM_UI = QWidget()
layout = QVBoxLayout()
GSM_formula_label = QLabel(
"GSM Channel to Freq 转换公式:" + "\n" +
"If Band = 'GSM850(B5)' or 'DCS1800(B3)' or 'PCS1900(B2)' :" + "\n" +
" DL_Freq = DL_MinFreq + 0.2*(Channel - DL_MinChannel)" + "\n" +
" UL_Freq = UL_MinFreq + 0.2*(Channel - UL_MinChannel)" + "\n" +
"If Band = 'EGSM900(B8)' :" + "\n" +
" DL_Freq = 935(MHz) + 0.2*(Channel - DL_MinChannel)" + "\n" +
" UL_Freq = 890(MHz) + 0.2*(Channel - UL_MinChannel)" + "\n" +
"注释:" + "\n" +
"1. (U)DL_MinFreq: 对应Band 的 DL 与 UL 的最小频率" + "\n" +
"2. Channel: 已知的 Channel, 待计算成频率对应关系的 Channel" + "\n" +
"3. (U)DL_MinChannel: 对应的 Band 的 UL 与 DL 的最小 Channel"
)
sub_QGridlayout = QGridLayout()
GSMEdit_Band_btn = QPushButton('Enter Band:',self)
GSMEdit_Band_btn.clicked.connect(self.enterGSM_Band)
self.GSMEdit_Band = QLabel(self)
sub_QGridlayout.addWidget(GSMEdit_Band_btn,0,0)
sub_QGridlayout.addWidget(self.GSMEdit_Band,0,1)
GSMEdit_MinFreq_btn = QPushButton('Enter MinFreq:',self)
GSMEdit_MinFreq_btn.clicked.connect(self.enterGSM_MinFreq)
self.GSMEdit_MinFreq = QLabel(self)
sub_QGridlayout.addWidget(GSMEdit_MinFreq_btn,1,0)
sub_QGridlayout.addWidget(self.GSMEdit_MinFreq,1,1)
GSMEdit_Channel_btn = QPushButton('Enter Channel:',self)
GSMEdit_Channel_btn.clicked.connect(self.enterGSM_Channel)
self.GSMEdit_Channel = QLabel(self)
sub_QGridlayout.addWidget(GSMEdit_Channel_btn,2,0)
sub_QGridlayout.addWidget(self.GSMEdit_Channel,2,1)
GSMEdit_MinChannel_btn = QPushButton('Enter MinChannel:',self)
GSMEdit_MinChannel_btn.clicked.connect(self.enterGSM_MinChannel)
self.GSMEdit_MinChannel = QLabel(self)
sub_QGridlayout.addWidget(GSMEdit_MinChannel_btn,3,0)
sub_QGridlayout.addWidget(self.GSMEdit_MinChannel,3,1)
GSMResult_Calculate_btn = QPushButton('Calculate:',self)
GSMResult_Calculate_btn.clicked.connect(self.GSM_calculate)
self.GSMResult_Calculate = QLabel(self)
sub_QGridlayout.addWidget(GSMResult_Calculate_btn,4,0)
sub_QGridlayout.addWidget(self.GSMResult_Calculate,4,1)
layout.addWidget(GSM_formula_label)
layout.addLayout(sub_QGridlayout)
GSM_UI.setLayout(layout)
return GSM_UI
######### --- 设置 GSM各个按钮功能
def enterGSM_Band(self):
self.GSM_Bandtext,ok = QInputDialog.getText(self,'Input Band','输入规则: \nSMT所用到的 GSM的Band有四个: \nGSM850 (B5) \nDCS1800 (B3) \nPCS1900 (B2) \nEGSM900 (B8) ')
if ok:
self.GSMEdit_Band.setText(str(self.GSM_Bandtext))
def enterGSM_MinFreq(self):
self.GSMEdit_MinFreqtext,ok = QInputDialog.getDouble(self,'Input MinFreq','输入规则: \n根据官网<http://www.sqimway.com/> \n查询对应 Band 的最小Freq,单位MHz')
if ok:
self.GSMEdit_MinFreq.setText(str((f'{self.GSMEdit_MinFreqtext} MHz')))
def enterGSM_Channel(self):
self.GSMEdit_Channeltext,ok = QInputDialog.getInt(self,'Input Channel','输入规则: \n输入需要求证的Channel')
if ok:
self.GSMEdit_Channel.setText(str(self.GSMEdit_Channeltext))
def enterGSM_MinChannel(self):
self.GSMEdit_MinChanneltext,ok = QInputDialog.getInt(self,'Input MinChannel','输入规则: \n根据官网<http://www.sqimway.com/> \n查询对应 Band 的最小Channel,上行对应上行, 下行对应下行; \n官网的对应名词为: Arfcn ')
if ok:
self.GSMEdit_MinChannel.setText(str(self.GSMEdit_MinChanneltext))
def GSM_calculate(self):
MinFreq = self.GSMEdit_MinFreqtext
Channel = self.GSMEdit_Channeltext
MinChannel = self.GSMEdit_MinChanneltext
# list_GSM_Band = ['GSM850','DCS1800','PCS1900','EGSM900']
# if self.GSM_Bandtext in list_GSM_Band:
GSM_Result = (MinFreq + 0.2*(Channel - MinChannel))
self.GSMResult_Calculate.setText((f'Freq = MinFreq + 0.2*(Channel - MinChannel) \n={MinFreq} + 0.2*({Channel} - {MinChannel})\n={round(GSM_Result,3)}(MHz)\n={round(GSM_Result*1000000,3)}(hz)'))
# elif self.GSM_Bandtext == "EGSM900":
# GSM_Result = (MinFreq + 0.2*(Channel - MinChannel))
# self.GSMResult_Calculate.setText((f'Freq = MinFreq + 0.2*(Channel - MinChannel) \n={MinFreq} + 0.2*({Channel} - {MinChannel})\n={round(GSM_Result,3)}(MHz)\n={round(GSM_Result*1000000,3)}(hz)'))
# else:
# text_error = ("输入的 Band格式不正确,请重新输入Band")
# self.GSMResult_Calculate.setText(str(text_error))
######### --- 设置 WCDMA页面
def WCDMA_CTF_UI(self):
WCDMA_UI = QWidget()
layout = QVBoxLayout()
WCDMA_formula_label = QLabel(
"WCDMA Channel to Freq 转换公式:" + "\n" +
"If Band = 'Band 1' or 'Band 2' or 'Band 5' :" + "\n" +
" DL_Freq = 0(MinFreq) + 0.2*Channel" + "\n" +
" UL_Freq = 0(MinFreq) + 0.2*Channel" + "\n" +
"If Band = 'Band 4' :" + "\n" +
" DL_Freq = 1805(MHz) + 0.2*Channel" + "\n" +
" UL_Freq = 1450(MHz) + 0.2*Channel" + "\n" +
"If Band = 'Band 8' :" + "\n" +
" DL_Freq = 340(MHz) + 0.2*Channel" + "\n" +
" UL_Freq = 340(MHz) + 0.2*Channel" + "\n" +
"注释:" + "\n" +
"1. Channel: 已知的 Channel, 待计算成频率对应关系的 Channel。"
)
sub_QGridlayout = QGridLayout()
WCDMAEdit_Band_btn = QPushButton('Enter Band:',self)
WCDMAEdit_Band_btn.clicked.connect(self.enterWCDMA_Band)
self.WCDMAEdit_Band = QLabel(self)
sub_QGridlayout.addWidget(WCDMAEdit_Band_btn,0,0)
sub_QGridlayout.addWidget(self.WCDMAEdit_Band,0,1)
WCDMAEdit_MinFreq_btn = QPushButton('Enter MinFreq:',self)
WCDMAEdit_MinFreq_btn.clicked.connect(self.enterWCDMA_MinFreq)
self.WCDMAEdit_MinFreq = QLabel(self)
sub_QGridlayout.addWidget(WCDMAEdit_MinFreq_btn,1,0)
sub_QGridlayout.addWidget(self.WCDMAEdit_MinFreq,1,1)
WCDMAEdit_Channel_btn = QPushButton('Enter Channel:',self)
WCDMAEdit_Channel_btn.clicked.connect(self.enterWCDMA_Channel)
self.WCDMAEdit_Channel = QLabel(self)
sub_QGridlayout.addWidget(WCDMAEdit_Channel_btn,2,0)
sub_QGridlayout.addWidget(self.WCDMAEdit_Channel,2,1)
WCDMAResult_Calculate_btn = QPushButton('Calculate:',self)
WCDMAResult_Calculate_btn.clicked.connect(self.WCDMA_calculate)
self.WCDMAResult_Calculate = QLabel(self)
sub_QGridlayout.addWidget(WCDMAResult_Calculate_btn,3,0)
sub_QGridlayout.addWidget(self.WCDMAResult_Calculate,3,1)
layout.addWidget(WCDMA_formula_label)
layout.addLayout(sub_QGridlayout)
WCDMA_UI.setLayout(layout)
return WCDMA_UI
######### --- 设置 WCDMA各个按钮功能
def enterWCDMA_Band(self):
list_WCDMA_Band = ['Band 1','Band 2','Band 5']
self.WCDMA_Bandtext,ok = QInputDialog.getText(self,'Input Band','输入规则: \nSMT所用到的 WCDMA的Band有5个: \nB1 \nB2 \nB5 \nB4 \nB8 ')
if ok:
self.WCDMAEdit_Band.setText(str(self.WCDMA_Bandtext))
if self.WCDMA_Bandtext in list_WCDMA_Band:
self.WCDMAEdit_MinFreq.setText(str("0"))
def enterWCDMA_MinFreq(self):
self.WCDMAEdit_MinFreqtext,ok = QInputDialog.getDouble(self,'Input MinFreq','输入规则: \n如果是Band 4 则DL为:1805; UL 为:1450; \n如果是Band 8 则UL/DL为: 340;\n其余不用输入单位MHz')
if ok:
self.WCDMAEdit_MinFreq.setText(str((f'{self.WCDMAEdit_MinFreqtext} MHz')))
def enterWCDMA_Channel(self):
self.WCDMAEdit_Channeltext,ok = QInputDialog.getInt(self,'Input Channel','输入规则: \n输入需要求证的Channel')
if ok:
self.WCDMAEdit_Channel.setText(str(self.WCDMAEdit_Channeltext))
def WCDMA_calculate(self):
Channel = self.WCDMAEdit_Channeltext
MinFreq = self.WCDMAEdit_MinFreqtext
WCDMA_Result = (MinFreq + 0.2*Channel)
self.WCDMAResult_Calculate.setText((f'Freq = MinFreq + 0.2*Channel \n={MinFreq} + 0.2*{Channel}\n={round(WCDMA_Result,3)}(MHz)\n={round(WCDMA_Result*1000000,3)}(hz)'))
######### --- 设置 LTE页面
def LTE_CTF_UI(self):
LTE_UI = QWidget()
layout = QVBoxLayout()
LTE_formula_label = QLabel(
"LTE Channel to Freq 转换公式:" + "\n" +
" DL_Freq = DL_MinFreq + 0.1*(Channel - DL_MinChannel)" + "\n" +
" UL_Freq = UL_MinFreq + 0.1*(Channel - UL_MinChannel)" + "\n" +
"注释:" + "\n" +
"1. (U)DL_MinFreq: 对应Band 的 DL 与 UL 的最小频率" + "\n" +
"2. Channel: 已知的 Channel, 待计算成频率对应关系的 Channel" + "\n" +
"3. (U)DL_MinChannel: 对应的 Band 的 UL 与 DL 的最小 Channel"
)
sub_QGridlayout = QGridLayout()
LTEEdit_Band_btn = QPushButton('Enter Band:',self)
LTEEdit_Band_btn.clicked.connect(self.enterLTE_Band)
self.LTEEdit_Band = QLabel(self)
sub_QGridlayout.addWidget(LTEEdit_Band_btn,0,0)
sub_QGridlayout.addWidget(self.LTEEdit_Band,0,1)
LTEEdit_MinFreq_btn = QPushButton('Enter MinFreq:',self)
LTEEdit_MinFreq_btn.clicked.connect(self.enterLTE_MinFreq)
self.LTEEdit_MinFreq = QLabel(self)
sub_QGridlayout.addWidget(LTEEdit_MinFreq_btn,1,0)
sub_QGridlayout.addWidget(self.LTEEdit_MinFreq,1,1)
LTEEdit_Channel_btn = QPushButton('Enter Channel:',self)
LTEEdit_Channel_btn.clicked.connect(self.enterLTE_Channel)
self.LTEEdit_Channel = QLabel(self)
sub_QGridlayout.addWidget(LTEEdit_Channel_btn,2,0)
sub_QGridlayout.addWidget(self.LTEEdit_Channel,2,1)
LTEEdit_MinChannel_btn = QPushButton('Enter MinChannel:',self)
LTEEdit_MinChannel_btn.clicked.connect(self.enterLTE_MinChannel)
self.LTEEdit_MinChannel = QLabel(self)
sub_QGridlayout.addWidget(LTEEdit_MinChannel_btn,3,0)
sub_QGridlayout.addWidget(self.LTEEdit_MinChannel,3,1)
LTEResult_Calculate_btn = QPushButton('Calculate:',self)
LTEResult_Calculate_btn.clicked.connect(self.LTE_calculate)
self.LTEResult_Calculate = QLabel(self)
sub_QGridlayout.addWidget(LTEResult_Calculate_btn,4,0)
sub_QGridlayout.addWidget(self.LTEResult_Calculate,4,1)
layout.addWidget(LTE_formula_label)
layout.addLayout(sub_QGridlayout)
LTE_UI.setLayout(layout)
return LTE_UI
######### --- 设置 LTE各个按钮功能
def enterLTE_Band(self):
self.LTE_Bandtext,ok = QInputDialog.getText(self,'Input Band','输入规则: \n如要输入 Band 511 则输入: B511 ')
if ok:
self.LTEEdit_Band.setText(str(self.LTE_Bandtext))
def enterLTE_MinFreq(self):
self.LTEEdit_MinFreqtext,ok = QInputDialog.getDouble(self,'Input MinFreq','输入规则: \n根据官网<http://www.sqimway.com/> \n查询对应 Band 的最小Freq,单位MHz')
if ok:
self.LTEEdit_MinFreq.setText(str((f'{self.LTEEdit_MinFreqtext} MHz')))
def enterLTE_Channel(self):
self.LTEEdit_Channeltext,ok = QInputDialog.getInt(self,'Input Channel','输入规则: \n输入需要求证的Channel')
if ok:
self.LTEEdit_Channel.setText(str(self.LTEEdit_Channeltext))
def enterLTE_MinChannel(self):
self.LTEEdit_MinChanneltext,ok = QInputDialog.getInt(self,'Input MinChannel','输入规则: \n根据官网<http://www.sqimway.com/> \n查询对应 Band 的最小Channel,上行对应上行, 下行对应下行; \n官网的对应名词为: Arfcn ')
if ok:
self.LTEEdit_MinChannel.setText(str(self.LTEEdit_MinChanneltext))
def LTE_calculate(self):
MinFreq = self.LTEEdit_MinFreqtext
Channel = self.LTEEdit_Channeltext
MinChannel = self.LTEEdit_MinChanneltext
LTE_Result = (MinFreq + 0.1*(Channel - MinChannel))
self.LTEResult_Calculate.setText((f'Freq = MinFreq + 0.1*(Channel - MinChannel) \n={MinFreq} + 0.1*({Channel} - {MinChannel})\n={round(LTE_Result,3)}(MHz)\n={round(LTE_Result*1000000,3)}(hz)'))
######### --- 设置 NR页面
def NR_CTF_UI(self):
NR_UI = QWidget()
layout = QVBoxLayout()
NR_formula_label = QLabel(
"NR Channel to Freq 转换公式:" + "\n" +
" DL_Freq = DL_MinFreq + △F*(Channel - DL_MinChannel)" + "\n" +
" UL_Freq = UL_MinFreq + △F*(Channel - UL_MinChannel)" + "\n" +
"If Channel = [0-599999]: " + "\n" +
" freq = [0-3000]MHz; △F = 5 kHz" + "\n" +
"If Channel = [600000-2016666]: " + "\n" +
" freq = [3000-24250]MHz; △F = 15 kHz" + "\n" +
"If Channel = [2016667-3279167]: " + "\n" +
" freq = [24250080-100000000]kHz; △F = 60 kHz" + "\n" +
"注释:" + "\n" +
"1. (U)DL_MinFreq: 对应Band 的 DL 与 UL 的最小频率" + "\n" +
"2. Channel: 已知的 Channel, 待计算成频率对应关系的 Channel" + "\n" +
"3. (U)DL_MinChannel: 对应的 Band 的 UL 与 DL 的最小 Channel"
)
sub_QGridlayout = QGridLayout()
NREdit_Band_btn = QPushButton('Enter Band:',self)
NREdit_Band_btn.clicked.connect(self.enterNR_Band)
self.NREdit_Band = QLabel(self)
sub_QGridlayout.addWidget(NREdit_Band_btn,0,0)
sub_QGridlayout.addWidget(self.NREdit_Band,0,1)
NREdit_MinFreq_btn = QPushButton('Enter MinFreq:',self)
NREdit_MinFreq_btn.clicked.connect(self.enterNR_MinFreq)
self.NREdit_MinFreq = QLabel('输入Channel后自动配置',self)
sub_QGridlayout.addWidget(NREdit_MinFreq_btn,1,0)
sub_QGridlayout.addWidget(self.NREdit_MinFreq,1,1)
NREdit_Channel_btn = QPushButton('Enter Channel:',self)
NREdit_Channel_btn.clicked.connect(self.enterNR_Channel)
self.NREdit_Channel = QLabel(self)
sub_QGridlayout.addWidget(NREdit_Channel_btn,2,0)
sub_QGridlayout.addWidget(self.NREdit_Channel,2,1)
NREdit_MinChannel_btn = QPushButton('Enter MinChannel:',self)
NREdit_MinChannel_btn.clicked.connect(self.enterNR_MinChannel)
self.NREdit_MinChannel = QLabel('输入Channel后自动配置',self)
sub_QGridlayout.addWidget(NREdit_MinChannel_btn,3,0)
sub_QGridlayout.addWidget(self.NREdit_MinChannel,3,1)
NRResult_Calculate_btn = QPushButton('Calculate:',self)
NRResult_Calculate_btn.clicked.connect(self.NR_calculate)
self.NRResult_Calculate = QLabel(self)
sub_QGridlayout.addWidget(NRResult_Calculate_btn,4,0)
sub_QGridlayout.addWidget(self.NRResult_Calculate,4,1)
layout.addWidget(NR_formula_label)
layout.addLayout(sub_QGridlayout)
NR_UI.setLayout(layout)
return NR_UI
######### --- 设置 NR各个按钮功能
def enterNR_Band(self):
self.NR_Bandtext,ok = QInputDialog.getText(self,'Input Band','输入规则: \n如要输入 Band 79 则输入: n79 ')
if ok:
self.NREdit_Band.setText(str(self.NR_Bandtext))
def enterNR_MinFreq(self):
self.NREdit_MinFreqtext,ok = QInputDialog.getDouble(self,'Input MinFreq','输入规则: \n根据官网<http://www.sqimway.com/> \n查询输入对应 Band 的最小Freq\n注意:必须单位MHz换算成kHz')
if ok:
self.NREdit_MinFreq.setText(str(self.NREdit_MinFreqtext))
def enterNR_Channel(self):
self.NREdit_Channeltext,ok = QInputDialog.getInt(self,'Input Channel','输入规则: \n输入需要求证的Channel')
if ok:
self.NREdit_Channel.setText(str(self.NREdit_Channeltext))
NRCH1 = range(0,599999)
NRCH2 = range(60000,2016666)
NRCH3 = range(2016667,3279167)
if self.NREdit_Channeltext in NRCH1:
self.NREdit_MinFreq.setText(str("0kHz"))
self.NREdit_MinChannel.setText(str("0"))
self.NREdit_MinFreqtext = int('0')
self.NREdit_MinChanneltext = int('0')
elif self.NREdit_Channeltext in NRCH2:
self.NREdit_MinFreq.setText(str("3000000kHz"))
self.NREdit_MinChannel.setText(str("600000"))
self.NREdit_MinFreqtext = int(3000000)
self.NREdit_MinChanneltext = int(600000)
elif self.NREdit_Channeltext in NRCH3:
self.NREdit_MinFreq.setText(str("24250080kHz"))
self.NREdit_MinChannel.setText(str("2016667"))
self.NREdit_MinFreqtext = int('24250080')
self.NREdit_MinChanneltext = int('2016667')
def enterNR_MinChannel(self):
self.NREdit_MinChanneltext,ok = QInputDialog.getInt(self,'Input MinChannel','输入规则: \n根据官网<http://www.sqimway.com/> \n查询对应 Band 的最小Channel,上行对应上行, 下行对应下行; \n官网的对应名词为: Arfcn ')
if ok:
self.NREdit_MinChannel.setText(str(self.NREdit_MinChanneltext))
def NR_calculate(self):
MinFreq = self.NREdit_MinFreqtext
Channel = self.NREdit_Channeltext
MinChannel = self.NREdit_MinChanneltext
tF = 0
NRCH1 = range(0,599999)
NRCH2 = range(60000,2016666)
NRCH3 = range(2016667,3279167)
if Channel in NRCH1:
tF = 5
NR_Result = (MinFreq + tF*(Channel - MinChannel))
self.NRResult_Calculate.setText((f'Freq = MinFreq + △F*(Channel - MinChannel) \n={MinFreq} + {tF}*({Channel} - {MinChannel})\n={round(NR_Result,3)}(kHz)\n={round(NR_Result*1000,3)}(hz)'))
elif Channel in NRCH2:
tF = 15
NR_Result = (MinFreq + tF*(Channel - MinChannel))
self.NRResult_Calculate.setText((f'Freq = MinFreq + △F*(Channel - MinChannel) \n={MinFreq} + {tF}*({Channel} - {MinChannel})\n={round(NR_Result,3)}(kHz)\n={round(NR_Result*1000,3)}(hz)'))
elif Channel in NRCH3:
tF= 60
NR_Result = (MinFreq + tF*(Channel - MinChannel))
self.NRResult_Calculate.setText((f'Freq = MinFreq + △F*(Channel - MinChannel) \n={MinFreq} + {tF}*({Channel} - {MinChannel})\n={round(NR_Result,3)}(kHz)\n={round(NR_Result*1000,3)}(hz)'))
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
PyQt5/ Channel to Freq
于 2022-10-18 17:38:52 首次发布