如何使pb数据窗口不可编辑变为可编辑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使pb数据窗口不可编辑变为可编辑相关的知识,希望对你有一定的参考价值。

对于整个数据窗口设置为只读后不可编辑,修正一下只读属性就可以了,
dw_1.object.datawindow.readonly = "no"

对于数据窗口里面某一列设置Tab=0后也是无法编辑,需要将其调整过来
dw_1.modify( "某列名.TabSequence = 某一具体数值" )

还想到的一种就是将数据窗口某一列的protect属性设置了表达式,进行保护,将表达式删除即可

这样回答不知道够不,其他的暂时未想到…… :)
参考技术A 打开数据窗口,点击 工具栏中的 Tab order ,会看到每一列上方都一个数字
某列 不能修改编辑时,为0;允许修改编辑时,为非0数
各列的数字大小不要相同,一般都用10的整数倍
这个数据的大小顺序,决定了在运行该数据窗口,用tab键的顺序
参考技术B dw_1.object.datawindow.readonly = true //将数据窗口设为只读状态 参考技术C taborder设定上值,row-update里选择允许更新的表和列就行

如何使可编辑标签在kivy中工作

以下代码打开窗口,标签位于顶部,标签在您单击后转为textinput。

但是,一旦你开始输入并插入第一个键(任何键),文本就会缩短,你会突然丢失部分文本。例如:您单击标签> textinput出现>您键入'1'>文本变为'按此处然后尝试1'。

如何更改下面的代码以阻止文本消失?

import kivy
kivy.require('1.10.1')

from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.base import runTouchApp
from kivy.properties import BooleanProperty, ObjectProperty

#https://github.com/kivy/kivy/wiki/Editable-Label
class EditableLabel(Label):

    edit = BooleanProperty(False)

    textinput = ObjectProperty(None, allownone=True)

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos) and not self.edit:
            self.edit = True
        return super(EditableLabel, self).on_touch_down(touch)

    def on_edit(self, instance, value):
        if not value:
            if self.textinput:
                self.remove_widget(self.textinput)
            return
        self.textinput = t = TextInput(
                text=self.text, size_hint=(None, None),
                font_size=self.font_size, font_name=self.font_name,
                pos=self.pos, size=self.size, multiline=False)
        self.bind(pos=t.setter('pos'), size=t.setter('size'))
        self.add_widget(self.textinput)
        t.bind(on_text_validate=self.on_text_validate, focus=self.on_text_focus)

    def on_text_validate(self, instance):
        self.text = instance.text
        self.edit = False

    def on_text_focus(self, instance, focus):
        if focus is False:
            self.text = instance.text
            self.edit = False

if __name__ == '__main__':

    root = FloatLayout()

    lbl = 'Press here and then try to edit (type a character), but text gets shortened suddenly.'
    label = EditableLabel(text=lbl, size_hint_y=None, height=50, pos_hint={'top': 1})
    root.add_widget(label)

    runTouchApp(root)
答案

根据docs

当光标位置改变时,选择自动更新。您可以从TextInput.selection_text属性中获取当前选定的文本。

在您的情况下,当您单击标签并出现在TextInput中时,光标会更改位置,以便选择文本。当选择一个文本并且你写了一些它被替换时,这就是文本消失的原因。

解决方案是清理选择:

from kivy.clock import Clock

class EditableLabel(Label):
    [...]
    def on_edit(self, instance, value):
        if not value:
            if self.textinput:
                self.remove_widget(self.textinput)
            return
        self.textinput = t = TextInput(
                text=self.text, size_hint=(None, None),
                font_size=self.font_size, font_name=self.font_name,
                pos=self.pos, size=self.size, multiline=False)
        self.bind(pos=t.setter('pos'), size=t.setter('size'))
        self.add_widget(self.textinput)
        t.bind(on_text_validate=self.on_text_validate, focus=self.on_text_focus)
        Clock.schedule_once(lambda dt: self.textinput.cancel_selection())

以上是关于如何使pb数据窗口不可编辑变为可编辑的主要内容,如果未能解决你的问题,请参考以下文章

在pb11.5中,如何看已经建好数据窗口的sql语句

c#如何使一个文本框变为不可编辑?但是又可以复制里面的数据?

如何使可编辑标签在kivy中工作

如何根据条件使primefaces datatable列可编辑

使 sql 视图可编辑

DEV GridControl怎样使GridView中满足某个条件的行可编辑,其余行不可编辑?