凊风 发表于 2024-4-1 11:26:14

FishC 发表于 2024-4-1 11:22
非常抱歉,我犯了个低级错误导致代码报错了。在使用QInputDialog.getText()方法时,传入的参数太多了, ...

我在调用customized_getText函数时,需要有个变量sheet_name适时传入...

input, ok = main_window.customized_getText('录入', f'请录入《汇总表》的

<{sheet_name}>'(工作表)中行号(从1开始计数,以英文逗号隔开。例如:

1,2,3):', x, y)

FishC 发表于 2024-4-1 11:26:26

凊风 发表于 2024-04-01 11:26
我在调用customized_getText函数时,需要有个变量shee ...

非常抱歉,我之前的回答中漏掉了一个参数。在调用customized_getText函数时,可以将额外的参数sheet_name传入。以下是修改后的代码示例:

def customized_getText(self, title, label, sheet_name, x, y):
    input, ok = QInputDialog.getText(self, title, label, QLineEdit.Normal, '', Qt.WindowFlags(), x, y)
    return input, ok

# 调用customized_getText函数
input, ok = main_window.customized_getText('录入', f'请录入《汇总表》的({sheet_name})中行号(从1开始计数,以英文逗号隔开。例如:1,2,3):', sheet_name, x, y)

在调用customized_getText函数时,传入额外的参数sheet_name即可。请注意更新调用该函数的部分代码。

希望这次能解决您的问题。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-1 11:29:48

FishC 发表于 2024-4-1 11:26
非常抱歉,我之前的回答中漏掉了一个参数。在调用customized_getText函数时,可以将额外的参数sheet_na ...

sheet_name变量我是从f{sheet_name}来传入的啊,

f'请录入《汇总表》的({sheet_name})中行号(从1开始计数,以英文逗号隔开。例如:1,2,3):'


不是单独传入的

FishC 发表于 2024-4-1 11:30:02

凊风 发表于 2024-04-01 11:29
sheet_name变量我是从f{sheet_name}来传入的啊,

f ...

非常抱歉,我理解错了您的问题。如果sheet_name是从f"{sheet_name}"的形式传入的,那么可以直接在函数内部进行字符串插值。以下是修改后的代码示例:

def customized_getText(self, title, label, x, y):
    input, ok = QInputDialog.getText(self, title, f'{label} ({x}, {y})')
    return input, ok

# 调用customized_getText函数
input, ok = main_window.customized_getText('录入', f'请录入《汇总表》的({sheet_name})中行号(从1开始计数,以英文逗号隔开。例如:1,2,3):', x, y)

在调用customized_getText函数时,将f-string形式的字符串作为label参数传入即可。希望这次能够帮到您!如有任何进一步的问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-1 11:31:19

FishC 发表于 2024-4-1 11:30
非常抱歉,我理解错了您的问题。如果sheet_name是从f"{sheet_name}"的形式传入的,那么可以直接在函数 ...

为什么坐标x、y也要括号起来呢?

def customized_getText(self, title, label, x, y):
    input, ok = QInputDialog.getText(self, title, f'{label} ({x}, {y})')
    return input, ok

FishC 发表于 2024-4-1 11:31:30

凊风 发表于 2024-04-01 11:31
为什么坐标x、y也要括号起来呢?

def customized_g ...

非常抱歉,我的回答中有误导之处。在上述代码中,括号是为了将x和y的值插入到字符串中,并以坐标的形式展示出来。

实际上,您可以根据需要来控制字符串的格式,自由地使用括号或不使用括号。如果您希望字符串显示为"请录入《汇总表》的(sheet_name)中行号(从1开始计数,以英文逗号隔开。例如:1,2,3):",可以在代码中这样写:

input, ok = QInputDialog.getText(self, title, f'{label} {sheet_name} 中行号(从1开始计数,以英文逗号隔开。例如:1,2,3):')

这样就能正确地将sheet_name的值插入到字符串中了。感谢您的指正,希望这次解答能够解决您的问题。如有任何进一步的疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-1 11:51:32

FishC 发表于 2024-4-1 10:44
非常抱歉给您带来的困惑。以下是对customized_getText方法进行更改,将其放在WindowB类中,并且将设置 ...

能不能让函数customized_getText(self, title, label, x, y)调用后,

1、既能设定坐标(以WindowB为父类不乱跑);

2、又能让用户录入的内容能够被以“,”切割呢?

FishC 发表于 2024-4-1 11:51:49

凊风 发表于 2024-04-01 11:51
能不能让函数customized_getText(self, title, label, ...

当然可以!以下是更新后的customized_getText方法,它能够设定位置和以逗号切割用户输入的内容:from PySide6.QtWidgets import QWidget, QInputDialogclass BaseWindow(QWidget):    def __init__(self):      super().__init__()class WindowA(BaseWindow):    def __init__(self):      super().__init__()class WindowB(BaseWindow):    def __init__(self):      super().__init__()    def customized_getText(self, title, label, x, y):      dlg = QInputDialog(self)      dlg.setInputMode(QInputDialog.TextInput)      dlg.setWindowTitle(title)      dlg.setLabelText(label)      dlg.move(x, y)      ok = dlg.exec()      if ok:            text = dlg.textValue()            return ok, text.split(',')      else:            return ok, []main_window = WindowB()x = 200y = 200input, values = main_window.customized_getText('录入', f'请录入行号(从1开始计数,以英文逗号隔开。例如:1,2,3):', x, y)现在,当调用customized_getText方法时,它会返回一个布尔值(代表用户是否点击了确定按钮)和一个列表(包含用户输入的内容以逗号分割)。如果用户点击取消按钮,返回的列表为空。希望这次的回答满足了您的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-1 11:56:12

FishC 发表于 2024-4-1 11:51
当然可以!以下是更新后的customized_getText方法,它能够设定位置和以逗号切割用户输入的内容:from P ...

回复请注意Python格式

FishC 发表于 2024-4-1 11:56:26

凊风 发表于 2024-04-01 11:56
回复请注意Python格式

非常抱歉,下面是更新后的customized_getText方法的Python代码,按照Python的格式编写:from PySide6.QtWidgets import QWidget, QInputDialog

class BaseWindow(QWidget):
    def __init__(self):
      super().__init__()

class WindowA(BaseWindow):
    def __init__(self):
      super().__init__()

class WindowB(BaseWindow):
    def __init__(self):
      super().__init__()

    def customized_getText(self, title, label, x, y):
      dlg = QInputDialog(self)
      dlg.setInputMode(QInputDialog.TextInput)
      dlg.setWindowTitle(title)
      dlg.setLabelText(label)
      dlg.move(x, y)
      ok = dlg.exec()
      if ok:
            text = dlg.textValue()
            return ok, text.split(',')
      else:
            return ok,

main_window = WindowB()
x = 200
y = 200
input_, values = main_window.customized_getText('录入', f'请录入行号(从1开始计数,以英文逗号隔开。例如:1,2,3):', x, y)
现在,当调用`customized_getText`方法时,它会返回一个布尔值(代表用户是否点击了确定按钮)和一个列表(包含用户输入的内容以逗号分割)。如果用户点击取消按钮,返回的列表为空。

希望这次的回答满足了您的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-1 13:23:30

FishC 发表于 2024-4-1 11:56
非常抱歉,下面是更新后的customized_getText方法的Python代码,按照Python的格式编写:
现在,当调用 ...

我想这样写:
def customized_getText(self, title, label, x, y):
      dlg = QInputDialog(self)
      dlg.setInputMode(QInputDialog.TextInput)
      dlg.setWindowTitle(title)
      dlg.setLabelText(label)
      dlg.move(x, y)
      ok = dlg.exec()

main_window = WindowB()
x = 200
y = 200
input_, values = main_window.customized_getText('录入', f'请录入行号(从1开始计数,以英文逗号隔开。例如:1,2,3):', x, y)

if ok:
exclude_rows_input = dlg.textValue()


再来对exclude_rows_input进行切割。

要怎么实现呢?


回复请注意python格式

FishC 发表于 2024-4-1 13:23:41

凊风 发表于 2024-04-01 13:23
我想这样写:
def customized_getText(self, title, ...

非常抱歉,我之前的回答中存在错误。要正确切割exclude_rows_input,请使用`.split(",")`方法将字符串按照逗号进行分割,如下所示:

def customized_getText(self, title, label, x, y):
    dlg = QInputDialog(self)
    dlg.setInputMode(QInputDialog.TextInput)
    dlg.setWindowTitle(title)
    dlg.setLabelText(label)
    dlg.move(x, y)
   
    ok = dlg.exec()
   
    if ok:
      exclude_rows_input = dlg.textValue()
      values = exclude_rows_input.split(",")
      return ok, values
      
    return ok, []

main_window = WindowB()
x = 200
y = 200
input_, values = main_window.customized_getText('录入', f'请录入行号(从1开始计数,以英文逗号隔开。例如:1,2,3):', x, y)

if input_:
    print(f"用户输入:{values}")

希望这次的回答对您有所帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-1 13:27:40

FishC 发表于 2024-4-1 13:23
非常抱歉,我之前的回答中存在错误。要正确切割exclude_rows_input,请使用`.split(",")`方法将字符串 ...

可能我没有表达清楚。

我的想法是记用户先录入内容,然后在不同的场合中把用户所录入的内容赋值给不同的变量(如exclude_rows_input、exclude_cols_input等等),然后再对exclude_rows_input(或者exclude_cols_input)更行切割 ,而不是在函数里customized_getText(self, title, label, x, y)就进行切割。

回复请注意python格式

FishC 发表于 2024-4-1 13:28:20

凊风 发表于 2024-04-01 13:27
可能我没有表达清楚。

我的想法是记用户先录入内容 ...

明白了您的意思。如果您想在不同的场合中使用用户输入的内容并进行切割,可以将`exclude_rows_input`(或其他变量)作为函数的返回值,然后在需要的地方对返回的值进行切割。下面是修改后的代码示例:

def customized_getText(self, title, label, x, y):
    dlg = QInputDialog(self)
    dlg.setInputMode(QInputDialog.TextInput)
    dlg.setWindowTitle(title)
    dlg.setLabelText(label)
    dlg.move(x, y)
    ok = dlg.exec()
    if ok:
      return dlg.textValue()
    return ""

# 在需要的地方调用customized_getText函数
main_window = WindowB()
x = 200
y = 200
input_ = main_window.customized_getText('录入', f'请录入行号(从1开始计数,以英文逗号隔开。例如:1,2,3):', x, y)
if input_:
    exclude_rows_input = input_
    values = exclude_rows_input.split(",")
    print(f"用户输入:{values}")

这样,即可根据需要在不同的地方使用用户输入的内容,并进行切割操作。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-1 13:48:55

FishC 发表于 2024-4-1 13:28
明白了您的意思。如果您想在不同的场合中使用用户输入的内容并进行切割,可以将`exclude_rows_input`( ...

感谢~~

FishC 发表于 2024-4-1 13:49:01

凊风 发表于 2024-04-01 13:48
感谢~~

不客气,如果还有其他问题,请随时提问。祝您编程愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-1 15:51:24

FishC 发表于 2024-4-1 10:32
根据您提供的代码结构和错误信息,问题出在调用`QInputDialog.getText()`函数时传入的参数不正确。

...

能不能把main_window = WindowB()
x = 200
y = 200

直接写入customized_getText函数中?不要每次调用都要带上这三行。。。

FishC 发表于 2024-4-1 15:51:40

凊风 发表于 2024-04-01 15:51
能不能把main_window = WindowB()
x = 200
y = 200
...

当然可以将这三行代码直接写入`customized_getText`函数中。在你的代码中,`customized_getText`方法定义为实例方法,因此可以通过`self`来访问类的属性和方法。这意味着你可以在`customized_getText`函数中直接使用`self.x`和`self.y`来获取坐标值。修正后的代码如下:

class BaseWindow(QWidget):
    def __init__(self):
      super().__init__()

class WindowA(BaseWindow):
    def __init__(self):
      super().__init__()

class WindowB(BaseWindow):
    def __init__(self):
      super().__init__()

    def customized_getText(self, title, label):
      x = 200
      y = 200

      dlg = QInputDialog(self)
      dlg.setInputMode(QInputDialog.TextInput)
      dlg.setWindowTitle(title)
      dlg.setLabelText(label)
      dlg.move(x, y)
      return dlg.exec(), dlg.textValue()

main_window = WindowB()
input, ok = main_window.customized_getText('录入', f'请录入行号(从1开始计数,以英文逗号隔开。例如:1,2,3):')

通过在`customized_getText`方法中直接定义`x`和`y`变量,并将它们传递给`dlg.move()`,你就不再需要每次调用时都写入这三行了。希望这个解决方案符合你的需求!如果还有任何问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: 1 2 [3]
查看完整版本: Pyside6问题求教~~