Текст метки не обновляется через значение переменной - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь обновить значение переменной и увидеть значение в метке, но метка не обновится, если я не установлю текстовое значение напрямую, а не через переменную. Как мне управлять этикеткой с помощью моего var?

import clr

clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Windows.Forms import Form, Application, Label, Button
from System.Drawing import Point, Size

class IForm(Form):

    def __init__(self):

        # Main Form
        self.CenterToScreen()

        v = "one"

        # Label1
        self.label1 = Label()
        self.label1.Text = v
        self.label1.Location = Point(30, 30)
        self.Controls.Add(self.label1)

        # Label1
        self.label2 = Label()
        self.label2.Text = v
        self.label2.Location = Point(30, 60)
        self.Controls.Add(self.label2)

        #button
        self.button = Button()
        self.button.Text = "push"
        self.button.Click += self.push
        self.Controls.Add(self.button) 

    def push(self, sender, event):
        global v
        v = "three"
        self.label2.Text = "three"

Application.Run(IForm())

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

так грустно, что на этом форуме нет помощи, нет предложений, нет подсказок :( Я провел еще несколько исследований и пытался перевести из C# источников, я придумал этот код, но все еще не работает. шанс получить помощь?


import clr
import System

clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Windows.Forms import Form, Application, Label, Button, Binding, BindingSource, FormBorderStyle, ComboBox
from System.Drawing import Size, Point, Font

data1 = """
job_number=001
job_name=Henderson
job_address=34 Henderson Street, Henderson
building_usage=Garage
costumer_name=John Doe
"""


data2 = """
job_number=002
job_name=Glen Dale
job_address=70 Fleet Street
building_usage=Hangar
costumer_name=Unknown
"""

class obj(System.Object):

    def __init__(self, name, text):
        self._name = name
        self._text = text

    @property
    def Name(self):
        return self._name

    @property
    def Text(self):
        return self._text

def toDict(mylist):    
    mylist = mylist.split('\n')
    odict = {}
    klist = []
    olist = []
    for i in mylist:
        if i != '' and i != ' ':
            key = str(i.split('=')[0].replace('"', ''))
            val = str(i.split('=')[1].replace('"', ''))
            klist.append(key)
            ob = obj(key, val)
            olist.append(ob)
    odict = dict(zip(klist, olist))
    return odict

global dictionary
dictionary = toDict(data1)



class MyForm(Form):

    def __init__(self):

        # Main Form
        self.ClientSize = Size(300, 200)
        self.CenterToScreen()
        self.Text = "MyForm"
        self.FormBorderStyle = FormBorderStyle.FixedDialog 

        font = Font("Arial", 14)

        # ComboBox1
        comboBox1 = ComboBox()
        comboBox1.Text = dictionary["job_name"].Name
        comboBox1.Font = font
        comboBox1.Location = Point(30, 10)
        comboBox1.Size = Size(190,90)
        self.Controls.Add(comboBox1) 

        button = Button()
        button.Text = "Update"
        comboBox1.Location = Point(30, 40)
        button.Click += self.update
        self.Controls.Add(button)  

        # Label1
        label1 = Label()
        label1.Text = dictionary["job_name"].Text
        label1.Font = font
        label1.Location = Point(30, 70)
        label1.Size = Size(190,90)
        self.Controls.Add(label1)  

        # Binding
        bs = BindingSource()
        bs.DataSource = dictionary

        comboBox1.DataSource = bs
        comboBox1.DataMember = dictionary["job_name"]
        label1.DataBindings.Add("Text", dictionary, dictionary["job_name"])


    # Actions
    def update(self, sender, event):
        global dictionary
        dictionary = toDict(data2)

dialog = MyForm()
Application.Run(dialog)
0 голосов
/ 07 марта 2020

после некоторых поисков связывания по ключевому слову я придумал это, но все еще не могу заставить его работать: (

import clr

clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Windows.Forms import Form, Application, Label, Button, Binding
from System.Drawing import Size, Point, Font

class myform(Form):

    def __init__(self):

        # Main Form
        self.ClientSize = Size(250, 100)
        self.CenterToScreen()

        button = Button()
        button.Text = "Bind"
        button.Click += self.onset
        self.Controls.Add(button)  

        val = "1. initial val"
        font = Font("Arial", 14)

        # Label1
        self.label1 = Label()
        self.label1.Text = val
        self.label1.Font = font
        self.label1.Location = Point(30, 50)
        self.label1.Parent = self

        bind = Binding("Text", val, val)

    def onset(self, sender, event):
        global val
        val = "2. suscess !"

dialog = myform()
Application.Run(dialog)
...