- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个.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_())
关于python - 将 .ui 转换为包含升级框架的 .py 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55431361/
我使用的是 Windows 8.1 和 Python 2.7,我在特定文件路径中设置了所有文件(希望正确),但每当我运行 python manage.py runserver 时,我都会收到此错误。
背景: 我有一个像这样的目录结构: Package/ setup.py src/ __init__.py __main__.py cod
我从这个线程运行了一个示例代码。 How to properly use coverage.py in Python? 但是,当我执行此命令时 py.test test.py --cov=sample
IPython 0.13.1 文档说: $ ipython -h ... Usage ipython [subcommand] [options] [files] If invoked
我写了一个网站,让我困惑的是当我运行这个网站时,首先我需要启动应用程序,所以有 3 种方法: sudo python xxx.py python xxx.py xxx.py 每一个我都不清楚怎么用,目
我不确定为什么它不起作用,这可能是一个您无法解决的问题,但我只是想知道为什么它不起作用。如果我浪费了您的时间,或者没有正确地提出问题,我很抱歉,我 16 岁,对 Python 还算陌生。 在main.
鉴于以下情况:models.py from .managers import PersonManager from django.db import models class Person(model
有没有办法将参数传递给 web.py 处理程序类构造函数? 例如。这些参数可能来自命令行(当主 web.py 脚本运行时),在第一个参数(作为端口号)之后 最佳答案 当然,这取决于你的意思。毕竟都是p
我对 python/django 编程很陌生,因为我没有编程背景。我正在在线上课,我只想确切地知道 manage.py 文件的作用。我试过用谷歌搜索它,但除了在 django-admin.py 周围放
我想将类别及其子类别保存到数据库中,这里每个类别都有多个子类别。您能帮我保存与类别相对应的用户、类别和多个子类别吗?Models.py、Serializers.py、Views .py 并附加传入请求
所以我的机器人开始有很多命令,并且在 main.py 上变得有点困惑。我知道有一种方法可以将命令存储在其他文件中,然后在 discord.js 上触发它们时将它们应用于 main.py。在 disco
我正在尝试制作一个类似于 mee6 的 Discord 机器人,因为它会按特定时间间隔计算用户在我的 Discord 服务器中发送的消息。我已经在网上搜索过,但即使有类似的问题也找不到我要找的东西。例
我正在尝试制作一个机器人,它根据特定 channel 中的消息创建线程。如果有在 discord.py 中的文本 channel 中创建线程的方法,请告诉我。 最佳答案 是的,但有一个问题。 当前版本
我一直在尝试制作一个命令来显示一些信息,然后当我对表情使用react时,它应该会显示另一组信息。 我尝试使用 this 的部分内容,特别是第 335 到 393 行的部分让它工作。但是,它什么也不做。
这是我试过的代码: @client.event async def on_message(message): if client.user.mention in message.content
我试过这段代码,机器人说猜但没有回应我的猜测。 @commands.command() async def game(self, ctx): number = random.randint(0
我决定尝试让我的不和谐机器人播放音乐,但我已经卡住了。主要是因为我找不到任何资源来帮助当前版本,我一直在从文档中获取所有内容。但是,我不知道如何检查机器人是否已连接到语音 channel 。 我试过
我在一个目录中有三个文件: # Untitled-1.py print("UTITLEDPY") if __name__== "__main__": from telegram.ext imp
我对 python 相当陌生,并且一直只使用 Jupyter Notebooks。当我需要运行我已保存在计算机中某处的 .py 文件时,我通常所做的就是使用魔术命令 %run %run '/home/
我有 Django 1.4 和 Python 2.6.6当我使用“django-amdin.py startproject djproject”时,请按照网页中的步骤操作 https://www.ib
我是一名优秀的程序员,十分优秀!