gpt4 book ai didi

python - 将 .ui 转换为包含升级框架的 .py 文件

转载 作者:行者123 更新时间:2023-11-30 21:56:48 24 4
gpt4 key购买 nike

我有一个.h file,它对应的.cpp file是一个频率 Controller 小部件。我可以通过将 Qframe 小部件提升到该 .h 文件来在 QtCreator 和 C++ 中使用它,没有任何问题。但我想在 QTDesigner 中构建一个 UI 并使用 pyuic5 将其转换为 python。当然,pyuic5无法理解c++代码,甚至在.ui文件中没有任何线索或指向.cpp文件的链接!那么如何将包含升级的 QFrame 的表单转换并使用 python 代码并在 pyqt 应用程序中使用它?

这是我设计的简单用户界面,我想使用 pyuic5 将其转换为 python

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>456</width>
<height>280</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="CFreqCtrl" name="freqCtrl">
<property name="geometry">
<rect>
<x>80</x>
<y>70</y>
<width>280</width>
<height>40</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>280</width>
<height>40</height>
</size>
</property>
<property name="toolTip">
<string/>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>CFreqCtrl</class>
<extends>QFrame</extends>
<header>freqctrl.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

最佳答案

pyuic 只是一个将 .ui 转换为 .py 的工具,因此他通过生成以下内容来完成此操作:

pyuic5 file.ui -o file_ui.py -x

file_ui.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'file.ui'
#
# Created by: PyQt5 UI code generator 5.12.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(456, 280)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.freqCtrl = CFreqCtrl(self.centralwidget)
self.freqCtrl.setGeometry(QtCore.QRect(80, 70, 280, 40))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.freqCtrl.sizePolicy().hasHeightForWidth())
self.freqCtrl.setSizePolicy(sizePolicy)
self.freqCtrl.setMinimumSize(QtCore.QSize(280, 40))
self.freqCtrl.setToolTip("")
self.freqCtrl.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.freqCtrl.setFrameShadow(QtWidgets.QFrame.Raised)
self.freqCtrl.setObjectName("freqCtrl")
MainWindow.setCentralWidget(self.centralwidget)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


from freqctrl import CFreqCtrl


if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

正如您所看到的,它具有以下指令 from freqctrl import CFreqCtrl 指示您要导入应位于 freqctrlv.py 文件中的 CFreqCtrl 类。

PyQt5 或 pyuic5 无法理解 C++ 代码,因此您的任务是手动将 C++ 代码移植到 python,另一个选项是使用 SIP 创建绑定(bind),请使用第一个选项:

freqctrl.py

from enum import Enum, auto
from PyQt5 import QtCore, QtGui, QtWidgets

class FctlUnit(Enum):
FCTL_UNIT_NONE = 0
FCTL_UNIT_HZ = auto()
FCTL_UNIT_KHZ = auto()
FCTL_UNIT_MHZ = auto()
FCTL_UNIT_GHZ = auto()
FCTL_UNIT_SEC = auto()
FCTL_UNIT_MSEC = auto()
FCTL_UNIT_USEC = auto()
FCTL_UNIT_NSEC = auto()


FCTL_MAX_DIGITS = 12
FCTL_MIN_DIGITS = 4

# Manual adjustment of Font size as percent of control height
DIGIT_SIZE_PERCENT = 90
UNITS_SIZE_PERCENT = 60

# adjustment for separation between digits
SEPRATIO_N = 100 # separation rectangle size ratio numerator times 100
SEPRATIO_D = 3 # separation rectangle size ratio denominator

STATUS_TIP = "Scroll or left-click to increase/decrease digit. " \
"Right-click to clear digits."

class CFreqCtrl(QtWidgets.QFrame):
newFrequency = QtCore.pyqtSignal(int)

def __init__(self, parent=None):
super(CFreqCtrl, self).__init__(parent)
self.m_UnitsRect = QtCore.QRect()
self.m_Pixmap = QtGui.QPixmap()
self.m_UnitsFont = QtGui.QFont()

self.m_DigitInfo = [
{"weight": 0, "incval": 0, "dQRect": QtCore.QRect(), "val": 0, "modified": False, "editmode": False}
for _ in range(FCTL_MAX_DIGITS)
]
self.m_SepRect = [QtCore.QRect() for _ in range(FCTL_MAX_DIGITS)]
self.m_LeadZeroPos = 0
self.setAutoFillBackground(False)
self.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
self.setFocusPolicy(QtCore.Qt.StrongFocus)
self.setMouseTracking(True)
self.m_BkColor = QtGui.QColor(0x1F, 0x1D, 0x1D, 0xFF)
self.m_DigitColor = QtGui.QColor(0xFF, 0xFF, 0xFF, 0xFF)
self.m_HighlightColor = QtGui.QColor(0x5A, 0x5A, 0x5A, 0xFF)
self.m_UnitsColor = QtCore.Qt.gray
self.m_freq = 0;
self.setup(0, 1, 4000000000, 1, FctlUnit.FCTL_UNIT_NONE)
self.m_Oldfreq = 0
self.m_LastLeadZeroPos = 0
self.m_LRMouseFreqSel = False
self.m_ActiveEditDigit = -1
self.m_ResetLowerDigits = True
self.fm_UnitsFont = QtGui.QFont("Arial", 12, QtGui.QFont.Normal)
self.m_DigitFont = QtGui.QFont("Arial", 12, QtGui.QFont.Normal);
self.setStatusTip(self.tr(STATUS_TIP))

def minimumSizeHint(self):
return QtCore.QSize(100, 20)

def sizeHint(self):
return QtCore.QSize(100, 20)

@staticmethod
def fmax_to_numdigits(fmax):
if fmax < 10e6:
return 7
elif fmax < 100e6:
return 8
elif fmax < 1e9:
return 9
elif fmax < 10e9:
return 10
elif fmax < 100e9:
return 11
return 12

def setup(self, NumDigits, Minf, Maxf, MinStep, unit):
pwr = 1
self.m_LastEditDigit = 0
self.m_Oldfreq = -1
self.m_NumDigits = NumDigits if NumDigits else CFreqCtrl.fmax_to_numdigits(Maxf)
self.m_NumDigits = min(max(self.m_NumDigits, FCTL_MIN_DIGITS), FCTL_MAX_DIGITS)
self.m_UnitString = ""
self.m_MinStep = 1 if MinStep == 0 else MinStep
self.m_MinFreq = Minf
self.m_MaxFreq = Maxf
self.m_freq = min(max(self.m_freq, self.m_MinFreq), self.m_MaxFreq)
for i in range(self.m_NumDigits):
self.m_DigitInfo[i]["weight"] = pwr
self.m_DigitInfo[i]["incval"] = pwr
self.m_DigitInfo[i]["modified"] = True
self.m_DigitInfo[i]["editmode"] = False
self.m_DigitInfo[i]["val"] = 0
pwr *= 10
if self.m_MaxFreq > pwr: self.m_MaxFreq = pwr - 1
self.m_MaxFreq -= self.m_MaxFreq % self.m_MinStep
if self.m_MinFreq > pwr: self.m_MinFreq = 1
self.m_MinFreq -= self.m_MinFreq % self.m_MinStep
self.m_DigStart = 0
self.setUnit(unit)
for i in range(self.m_NumDigits-1, -1, -1):
if self.m_DigitInfo[i]["weight"] <= self.m_MinStep:
if self.m_DigStart == 0:
self.m_DigitInfo[i]["incval"] = self.m_MinStep
self.m_DigStart = i
else:
if (self.m_MinStep % self.m_DigitInfo[i + 1]["weight"]) != 0:
self.m_DigStart = i
self.m_DigitInfo[i]["incval"] = 0
self.m_NumSeps = (self.m_NumDigits - 1) / 3 - self.m_DigStart / 3

def setFrequency(self, freq):
acc = 0
if freq == self.m_Oldfreq:
return
freq = max(min(freq, self.m_MaxFreq), self.m_MinFreq)
self.m_freq = freq - freq % self.m_MinStep
rem = self.m_freq
self.m_LeadZeroPos = self.m_NumDigits
for i in range(self.m_NumDigits - 1, self.m_DigStart-1, -1):
val = int(rem /self. m_DigitInfo[i]["weight"])
if self.m_DigitInfo[i]["val"] != val:
self.m_DigitInfo[i]["val"] = val
self.m_DigitInfo[i]["modified"] = True
rem -= (val * self.m_DigitInfo[i]["weight"])
acc += val
if acc == 0 and i > self.m_DecPos:
self.m_LeadZeroPos = i

if self.m_Oldfreq * self.m_freq < 0 and self.m_DigitInfo[self.m_LeadZeroPos - 1]["val"] == 0:
self.m_DigitInfo[self.m_LeadZeroPos - 1]["modified"] = True
if self.m_freq < 0:
if self.m_DigitInfo[self.m_LeadZeroPos - 1]["val"] > 0:
self.m_DigitInfo[self.m_LeadZeroPos - 1]["val"] *= -1

for i in range(self.m_LeadZeroPos - 1):
if self.m_DigitInfo[i]["val"] < 0:
self.m_DigitInfo[i]["val"] *= -1
self.m_Oldfreq = self.m_freq
self.newFrequency.emit(self.m_freq)
self.updateCtrl(self.m_LastLeadZeroPos != self.m_LeadZeroPos)
self.m_LastLeadZeroPos = self.m_LeadZeroPos

def setDigitColor(self, col):
self.m_UpdateAll = True
self.m_DigitColor = col;
for i in range(self.m_DigStart, self.m_NumDigits):
self.m_DigitInfo[i]["modified"] = True
self.updateCtrl(True)

def setUnit(self, unit):
self.m_NumDigitsForUnit = 0 if unit == FctlUnit.FCTL_UNIT_NONE else 2
d = {
FctlUnit.FCTL_UNIT_NONE: (0, ""),
FctlUnit.FCTL_UNIT_HZ: (0, "Hz"),
FctlUnit.FCTL_UNIT_KHZ: (3, "KHz"),
FctlUnit.FCTL_UNIT_MHZ: (6, "MHz"),
FctlUnit.FCTL_UNIT_GHZ: (9, "GHz"),
FctlUnit.FCTL_UNIT_SEC: (6, "Sec"),
FctlUnit.FCTL_UNIT_MSEC: (3, "mS"),
FctlUnit.FCTL_UNIT_USEC: (0, "uS"),
FctlUnit.FCTL_UNIT_NSEC: (0, "nS")
}
self.m_DecPos, self.m_UnitString = d[unit]
self. m_Unit = unit
self.m_UpdateAll = True
self.updateCtrl(True)

def setBgColor(self, col):
self.m_UpdateAll = True
self.m_BkColor = col
for i in range(self.m_DigStart, self.m_NumDigits):
self.m_DigitInfo[i]["modified"] = True
self.updateCtrl(True)

def setUnitsColor(self, col):
self.m_UpdateAll = True
self.m_UnitsColor = col
self.updateCtrl(True);

def setHighlightColor(self, col):
self.m_UpdateAll = True
self.m_HighlightColor = col
self.updateCtrl(True)

def updateCtrl(self, _all):
if _all:
self.m_UpdateAll = True
for i in range(self.m_DigStart, self.m_NumDigits):
self.m_DigitInfo[i]["modified"] = True
self.update()


def resizeEvent(self, event):
self.m_Pixmap = QtGui.QPixmap(self.size())
self.m_Pixmap.fill(self.m_BkColor)
self.m_UpdateAll = True
self.updateCtrl(True)

def leaveEvent(self, event):
if self.m_ActiveEditDigit >= 0:
if self.m_DigitInfo[self.m_ActiveEditDigit]["editmode"]:
self.m_DigitInfo[self.m_ActiveEditDigit]["editmode"] = False
self.m_DigitInfo[self.m_ActiveEditDigit]["modified"] = True;
self.m_ActiveEditDigit = -1
self.updateCtrl(False)

def paintEvent(self, event):
painter = QtGui.QPainter(self.m_Pixmap)
if self.m_UpdateAll:
self.drawBkGround(painter)
self.m_UpdateAll = False
self.drawDigits(painter)
scrnpainter = QtGui.QPainter(self)
scrnpainter.drawPixmap(0, 0, self.m_Pixmap)

def mouseMoveEvent(self, event):
pt = event.pos()
if self.isActiveWindow():
if not self.hasFocus():
self.setFocus(QtCore.Qt.MouseFocusReason)
for i in range(self.m_DigStart, self.m_NumDigits):
if self.m_DigitInfo[i]["dQRect"].contains(pt):
if not self.m_DigitInfo[i]["editmode"]:
self.m_DigitInfo[i]["editmode"] = True
self.m_ActiveEditDigit = i
else:
if self.m_DigitInfo[i]["editmode"]:
self.m_DigitInfo[i]["editmode"] = False
self.m_DigitInfo[i]["modified"] = True
self.updateCtrl(False)

def mousePressEvent(self, event):
pt = event.pos()
if event.button() == QtCore.Qt.LeftButton:
for i in range(self.m_DigStart, self.m_NumDigits):
if self.m_DigitInfo[i]["dQRect"].contains(pt):
if self.m_LRMouseFreqSel:
self.incFreq()
else:
if pt.y() < self.m_DigitInfo[i]["dQRect"].bottom():
self.incFreq()
else:
self.decFreq()
elif event.button() == QtCore.Qt.RightButton:
for i in range(self.m_DigStart, self.m_NumDigits):
if self.m_DigitInfo[i]["dQRect"].contains(pt):
if self.m_LRMouseFreqSel:
self.decFreq()
else:
self.clearFreq()

def wheelEvent(self, event):
pt = event.pos()
numDegrees = event.angleDelta().y() / 8
numSteps = numDegrees / 15
for i in range(self.m_DigStart, self.m_NumDigits):
if self.m_DigitInfo[i]["dQRect"].contains(pt):
if numSteps > 0:
self.incFreq()
elif numSteps < 0:
self.decFreq()

def keyPressEvent(self, event):
fSkipMsg = False
if event.key() in (QtCore.Qt.Key_0, QtCore.Qt.Key_1, QtCore.Qt.Key_2,
QtCore.Qt.Key_3, QtCore.Qt.Key_4, QtCore.Qt.Key_5, QtCore.Qt.Key_6,
QtCore.Qt.Key_7, QtCore.Qt.Key_8, QtCore.Qt.Key_9,):
if self.m_ActiveEditDigit >= 0:
if self.m_DigitInfo[self.m_ActiveEditDigit]["editmode"]:
tmp = int((self.m_freq / self.m_DigitInfo[self.m_ActiveEditDigit]["weight"]) % 10)
self.m_freq -= tmp * self.m_DigitInfo[self.m_ActiveEditDigit]["weight"]
self.m_freq += (event.key() - ord('0')) * self.m_DigitInfo[self.m_ActiveEditDigit]["weight"]
self.setFrequency(self.m_freq)
self.moveCursorRight()
fSkipMsg = True
elif event.key() in (QtCore.Qt.Key_Backspace, QtCore.Qt.Key_Left,):
if self.m_ActiveEditDigit != -1:
self.moveCursorLeft()
fSkipMsg = True;
elif event.key() == QtCore.Qt.Key_Up:
if self.m_ActiveEditDigit != -1:
self.incFreq()
fSkipMsg = True
elif event.key() == QtCore.Qt.Key_Down:
if self.m_ActiveEditDigit != -1:
self.decFreq()
fSkipMsg = True
elif event.key() == QtCore.Qt.Key_Right:
if self.m_ActiveEditDigit != -1:
self.moveCursorRight()
fSkipMsg = True
elif event.key() == QtCore.Qt.Key_Home:
self.cursorHome()
fSkipMsg = True
if event.key() == QtCore.Qt.Key_End:
self.cursorEnd()
fSkipMsg = True

if not fSkipMsg:
super(CFreqCtrl, self).keyPressEvent(event)

def drawBkGround(self, painter):
rect = self.rect()
cellwidth = int(100 * rect.width() / (100 * (self.m_NumDigits + self.m_NumDigitsForUnit) + (self.m_NumSeps * SEPRATIO_N) / SEPRATIO_D))
sepwidth = int((SEPRATIO_N * cellwidth) / (100 * SEPRATIO_D))
if self.m_Unit != FctlUnit.FCTL_UNIT_NONE:
self.m_UnitsRect.setRect(rect.right() - 2 * cellwidth, rect.top(), 2 * cellwidth, rect.height())
painter.fillRect(self.m_UnitsRect, self.m_BkColor)
self.m_UnitsFont.setPixelSize((UNITS_SIZE_PERCENT * rect.height()) / 100)
self.m_UnitsFont.setFamily("Arial")
painter.setFont(self.m_UnitsFont)
painter.setPen(self.m_UnitsColor)
painter.drawText(self.m_UnitsRect, QtCore.Qt.AlignCenter, self.m_UnitString)
self.m_DigitFont.setPixelSize((DIGIT_SIZE_PERCENT * rect.height()) / 100)
self.m_DigitFont.setFamily("Arial")
painter.setFont(self.m_DigitFont)
painter.setPen(self.m_DigitColor)
dgsep = ' '
digpos = rect.right() - self.m_NumDigitsForUnit * cellwidth - 1
for i in range(self.m_DigStart, self.m_NumDigits):
if i > self.m_DigStart and (i % 3) == 0:
self.m_SepRect[i].setCoords(digpos - sepwidth, rect.top(), digpos, rect.bottom())
painter.fillRect(self.m_SepRect[i], self.m_BkColor)
digpos -= sepwidth
if self.m_Unit == FctlUnit.FCTL_UNIT_NONE:
dgsep = '.' if self.m_LeadZeroPos > i else ' '
else:
dgsep = '.' if i == self.m_DecPos else ' '
painter.drawText(self.m_SepRect[i], QtCore.Qt.AlignCenter, dgsep)
else:
self.m_SepRect[i].setCoords(0, 0, 0, 0)
self.m_DigitInfo[i]["dQRect"].setCoords(digpos - cellwidth, rect.top(), digpos, rect.bottom())
digpos -= cellwidth

def drawDigits(self, painter):
painter.setFont(self.m_DigitFont)
self.m_FirstEditableDigit = self.m_DigStart
for i in range(self.m_DigStart, self.m_NumDigits):
if self.m_DigitInfo[i]["incval"] == 0:
self.m_FirstEditableDigit += 1
if self.m_DigitInfo[i]["modified"] or self.m_DigitInfo[i]["editmode"]:
if self.m_DigitInfo[i]["editmode"] and self.m_DigitInfo[i]["incval"] != 0:
painter.fillRect(self.m_DigitInfo[i]["dQRect"], self.m_HighlightColor)
else:
painter.fillRect(self.m_DigitInfo[i]["dQRect"], self.m_BkColor)
painter.setPen(self.m_BkColor if i >= self.m_LeadZeroPos else self.m_DigitColor)
if self.m_freq < 0 and i == self.m_LeadZeroPos - 1 and self.m_DigitInfo[i]["val"] == 0:
painter.drawText(self.m_DigitInfo[i]["dQRect"], QtCore.Qt.AlignCenter, "-0")
else:
painter.drawText(self.m_DigitInfo[i]["dQRect"], QtCore.Qt.AlignCenter, str(self.m_DigitInfo[i]["val"]))
self.m_DigitInfo[i]["modified"] = False

def incDigit(self):
if self.m_ActiveEditDigit >= 0:
if self.m_DigitInfo[self.m_ActiveEditDigit]["editmode"]:
if self.m_DigitInfo[self.m_ActiveEditDigit]["weight"] == self.m_DigitInfo[self.m_ActiveEditDigit]["incval"]:
tmp = int((self.m_freq / self.m_DigitInfo[self.m_ActiveEditDigit]["weight"]) % 10)
self.m_freq -= tmp * self.m_DigitInfo[self.m_ActiveEditDigit]["weight"]
tmp += 1
if tmp > 9: tmp = 0
self.m_freq += int(tmp*self.m_DigitInfo[self.m_ActiveEditDigit]["weight"])
else:
tmp = int((self.m_freq / self.m_DigitInfo[self.m_ActiveEditDigit + 1]["weight"]) % 10)
tmpl = self.m_freq + self.m_DigitInfo[m_ActiveEditDigit]["incval"]
if tmp != int((tmpl / m_DigitInfo[m_ActiveEditDigit + 1]["weight"]) %10):
tmpl -= self.m_DigitInfo[self.m_ActiveEditDigit + 1]["weight"]
self.m_freq = tmpl
self.setFrequency(self.m_freq)

def incFreq(self):
if self.m_ActiveEditDigit >= 0:
if self.m_DigitInfo[self.m_ActiveEditDigit]["editmode"]:
self.m_freq += self.m_DigitInfo[self.m_ActiveEditDigit]["incval"]
if self.m_ResetLowerDigits:
self.m_freq -= self.m_freq % self.m_DigitInfo[self.m_ActiveEditDigit]["weight"]
self.setFrequency(self.m_freq)
self.m_LastEditDigit = self.m_ActiveEditDigit

def decDigit(self):
if self.m_ActiveEditDigit >= 0:
if self.m_DigitInfo[m_ActiveEditDigit]["editmode"]:
if self.m_DigitInfo[self.m_ActiveEditDigit]["weight"] == self. m_DigitInfo[self.m_ActiveEditDigit]["incval"]:
tmp = int((m_freq / m_DigitInfo[m_ActiveEditDigit]["weight"]) % 10)
self.m_freq -= tmp * self.m_DigitInfo[self.m_ActiveEditDigit]["weight"]
tmp -= 1
if tmp < 0: tmp = 9
self.m_freq += int(tmp *m_DigitInfo[m_ActiveEditDigit]["weight"])
else:
tmp = int((self.m_freq / self.m_DigitInfo[self.m_ActiveEditDigit + 1]["weight"]) % 10)
tmpl = m_freq - self.m_DigitInfo[self.m_ActiveEditDigit]["incval"]
if tmp != int((tmpl / m_DigitInfo[m_ActiveEditDigit + 1]["weight"]) % 10):
tmpl += self.m_DigitInfo[self.m_ActiveEditDigit + 1]["weight"]
self.m_freq = tmpl
self.setFrequency(self.m_freq)

def decFreq(self):
if self.m_ActiveEditDigit >= 0:
if self.m_DigitInfo[self.m_ActiveEditDigit]["editmode"]:
self.m_freq -= self.m_DigitInfo[self.m_ActiveEditDigit]["incval"]
if self.m_ResetLowerDigits:
self.m_freq -= self.m_freq % self.m_DigitInfo[self.m_ActiveEditDigit]["weight"]
self.setFrequency(self.m_freq)
self.m_LastEditDigit = self.m_ActiveEditDigit

def clearFreq(self):
if self.m_ActiveEditDigit >= 0:
if self.m_DigitInfo[self.m_ActiveEditDigit]["editmode"]:
self.m_freq -= self.m_DigitInfo[self.m_ActiveEditDigit]["val"] * self.m_DigitInfo[self.m_ActiveEditDigit]["incval"]
self.m_freq -= self.m_freq % self.m_DigitInfo[self.m_ActiveEditDigit]["weight"]
self.setFrequency(self.m_freq)
self.m_LastEditDigit = self.m_ActiveEditDigit

def moveCursorLeft(self):
if 0 <= self.m_ActiveEditDigit < (self.m_NumDigits - 1):
self.m_ActiveEditDigit += 1
self.cursor().setPos(self.mapToGlobal(self.m_DigitInfo[self.m_ActiveEditDigit]["dQRect"].center()))

def moveCursorRight(self):
if self.m_ActiveEditDigit > self.m_FirstEditableDigit:
self.m_ActiveEditDigit -= 1
self.cursor().setPos(self.mapToGlobal(self.m_DigitInfo[self.m_ActiveEditDigit]["dQRect"].center()))

def cursorHome(self):
if self.m_ActiveEditDigit >= 0:
self.cursor().setPos(self.mapToGlobal(self.m_DigitInfo[self.m_NumDigits - 1]["dQRect"].center()))

def cursorEnd(self):
if self.m_ActiveEditDigit > 0:
self.cursor().setPos(self.mapToGlobal(self.m_DigitInfo[self.m_FirstEditableDigit]["dQRect"].center()))

if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = CFreqCtrl()
w.setup(10, 0, 1e10, 1, FctlUnit.FCTL_UNIT_GHZ)
w.setFrequency(1234567890)
w.show()
sys.exit(app.exec_())

enter image description here

enter image description here

关于python - 将 .ui 转换为包含升级框架的 .py 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55431361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com